[T-SQL] 使用 Pivot 語法彙總卻不彙總
在 SQL Server 中撰寫 T-SQL 應用 Pivot 語法,原本預期從左側的原始資料透過 Pivot 得到 (1) 的結果,
但偶而會遇到數值沒有合計,資料呈現為兩筆的狀況,如下圖 (2) 的狀況。
進一步了解,Pivot 語法中對於原始資料有三種概念
1. column being aggregated 要彙總的資料行,此案例為 Amount
2. column that contains the values that will become column headers 包含將變成資料行標頭之值的資料行,此案例為 Customer
3. first pivoted column, second pivoted column… ,此案例為 A001, A002
Pivot 計算過程會將上述之外的資料欄位進行群組,若有其他欄位值不相同者時則發生呈現多筆的狀況。
當發生類似的狀況可以檢查有否查詢多餘的欄位,從來源中移除欄位即可解決。
範例
/*原始資料*/ DECLARE @OrderTable as Table(ID int, Customer varchar(8), OrderDate date, Amount int) insert @OrderTable(ID, Customer, OrderDate, Amount) select 1, 'A001', convert(date, '2018-10-01'), 100 union all select 1, 'A001', convert(date, '2018-10-01'), 110 union all select 2, 'A001', convert(date, '2018-10-01'), 120 union all select 2, 'A001', convert(date, '2018-10-01'), 130 union all select 3, 'A002', convert(date, '2018-10-01'), 200; select * from @OrderTable; /*發生錯誤的 Pivot 結果*/ select OrderDate, A001, A002 from ( select ID, Customer, OrderDate, Amount /*多 ID 造成錯誤*/ from @OrderTable A )Src Pivot( sum(Amount) for Customer in ( [A001], [A002]) ) PT; /*正確的 Pivot 結果*/ select OrderDate, A001, A002 from( select OrderDate, Customer, Amount from @OrderTable A )Src Pivot( sum(Amount) for Customer in ( [A001], [A002]) ) PT;