[SQL Server]行轉列pivot透視表的建立
阿新 • • 發佈:2021-01-01
應用場景
在使用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展示出來