use*_*929 1 sql pivot pivot-table
就拿这个例子: http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx
数据透视请求基本上涉及三个逻辑处理阶段,每个阶段都包含相关元素:
这里重要的是你用PIVOT算子do not explicitly specify the grouping elements,removing the need for GROUP BY in the query.PIVOT运算符图中出来的分组元素隐含地从那些没有指定为源表(或表表达式)的所有属性的任一spreading element或aggregation element.因此,您必须确保PIVOT运算符的源表除了分组,传播和聚合元素之外没有任何属性,因此在指定传播和聚合元素之后,剩下的唯一属性是您打算作为分组元素的属性.作为最好的做法是通过不直接将PIVOT运算符应用于原始表,而是应用于仅包含表示旋转元素和的属性的表表达式来实现此目的no others.
因此,在给定的情况下将这些阶段映射到需求
'IncomeDay'与最终列名列值:[问] [TUE],[WED],[周四],[周五],[SAT],[SUN].'IncomeAmount' 值将被聚合以产生用于分组和扩展元素的交叉值'VendorId'符合要进行分组的列.将这些值放在标准的Pivot语句中:
SELECT ...
FROM <source_table_or_table_expression>
PIVOT(<agg_func>(<aggregation_element>)
FOR <spreading_element>
IN (<list_of_target_columns>)) AS <result_table_alias>
Run Code Online (Sandbox Code Playgroud)
查询变为:
select * from DailyIncome
pivot (avg (IncomeAmount)
for IncomeDay
in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as AvgIncomePerDay
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!!