应用场景
在使用SQL Server时,基于原有的表做一张透视表(pivot table)
SQL代码以及实例展示
SQL代码
SELECT expression
,[value_in_field]
,[value_in_field]
.....
,[value_in_field]
FROM (SELECT expression,field,field_polymer FROM table_resource)A
PIVOT
(expression_polymer(field_polymer)
For field IN
([value_in_field]
,[value_in_field]
.....
,[value_in_field]
)
-- expression:透视表中的行;可使用多个expression;来源于原表
-- value_in_field:原表中需要行转列/需要透视的列field中的value;来源于原表
-- expression_polymer(field):想要在透视表中展示的聚合后的值;聚合函数(来源于原表的field_polymer)
这里需要注意的是:如果value_in_field如果含有像’.’,’-’,’_‘这样的特殊字符,两边必须加’[]’,不然会报如下错误,如果为常规字符串两边可不加’[]’
Incorrect syntax near ‘2020’.
书写需注意以及结果展示:
-
这里建议在value_in_field两边加’[]'
-
如果在原表中找不到的值会以NULL展示
实例展示
pivot透视表中想要的效果:
- 行为:原表中的A和B
- 列为:原表D中的部分时间
- 想要在透视表中展示的聚合后的值:SUM(C),原表中的 C 字段
代码:
SELECT A
,B
,[2020-10-09]
,[2020-10-16]
,[2020-10-23]
,[2020-10-30]
,[2020-11-06]
,[2020-11-13]
,[2020-11-20]
,[2020-11-27]
,[2020-12-04]
,[2020-12-11]
,[2020-12-18]
,[2020-12-25]
,[2021-01-01]
FROM (SELECT D,B,A,C FROM e)A
PIVOT
(SUM(C)
For D IN
( [2020-10-09]
,[2020-10-16]
,[2020-10-23]
,[2020-10-30]
,[2020-11-06]
,[2020-11-13]
,[2020-11-20]
,[2020-11-27]
,[2020-12-04]
,[2020-12-11]
,[2020-12-18]
,[2020-12-25]
,[2021-01-01]
)) B
结果展示:
在原表中,在对应时间中找不到的数值以NULL展示出来