1. 程式人生 > 資料庫 >[SQL Server]行轉列pivot透視表的建立

[SQL Server]行轉列pivot透視表的建立

應用場景

在使用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’.
在這裡插入圖片描述

書寫需注意以及結果展示

  1. 這裡建議在value_in_field兩邊加’[]'

  2. 如果在原表中找不到的值會以NULL展示

例項展示

pivot透視表中想要的效果:

  1. 行為:原表中的A和B
  2. 列為:原表D中的部分時間
  3. 想要在透視表中展示的聚合後的值: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展示出來