?? 6.3.2 多列轉換為行的交叉報表處理示例.sql
字號:
--1. 多個匯總列轉換為行記錄。
/*--
下面的示例將列Quarter水平顯示,統(tǒng)計每年(列Year)的數(shù)據(jù)(列Quantity)合計
平均價格(列Price)。在處理平均價格和總金額時,由于聚合函數(shù)會把處理結果轉換為float
所以使用了CAST函數(shù)將數(shù)據(jù)轉換為decimal并保留兩位小數(shù)。
--*/
DECLARE @t TABLE(Year int,Quarter int,Quantity decimal(10,1),Price decimal(10,2))
INSERT @t SELECT 1990, 1, 1.1, 2.5
UNION ALL SELECT 1990, 1, 1.2, 3.0
UNION ALL SELECT 1990, 2, 1.2, 3.0
UNION ALL SELECT 1990, 1, 1.3, 3.5
UNION ALL SELECT 1990, 2, 1.4, 4.0
UNION ALL SELECT 1991, 1, 2.1, 4.5
UNION ALL SELECT 1991, 2, 2.1, 4.5
UNION ALL SELECT 1991, 2, 2.2, 5.0
UNION ALL SELECT 1991, 1, 2.3, 5.5
UNION ALL SELECT 1991, 1, 2.4, 6.0
--查詢處理
SELECT Year,
Q1_Amount=SUM(CASE Quarter WHEN 1 THEN Quantity END),
Q1_Price=CAST(AVG(CASE Quarter WHEN 1 THEN Price END) AS DECIMAL(10,2)),
Q1_Money=CAST(SUM(CASE Quarter WHEN 1 THEN Quantity*Price END) AS DECIMAL(10,2)),
Q2_Amount=SUM(CASE Quarter WHEN 2 THEN Quantity END),
Q2_Price=CAST(AVG(CASE Quarter WHEN 2 THEN Price END) AS DECIMAL(10,2)),
Q2_Money=CAST(SUM(CASE Quarter WHEN 2 THEN Quantity*Price END) AS DECIMAL(10,2))
FROM @t
GROUP BY Year
/*--結果
Year Q1_Amount Q1_Price Q1_Money Q2_Amount Q2_Price Q2_Money
------- ----------------- --------------- ----------------- ----------------- -------------- ----------------
1990 3.6 3.00 10.90 2.6 3.50 9.20
1991 6.8 5.33 36.50 4.3 4.75 20.45
--*/
/*=====================================================*/
--2. 多個列轉換為行記錄。
/*--
下面的示例中,按照列Groups分組,統(tǒng)計不同的Item、Color的Quantity合計數(shù)據(jù)
并且將列Item和Color的統(tǒng)計結果水平顯示。
--*/
DECLARE @t TABLE(Groups char(2),Item varchar(10),Color varchar(10),Quantity int)
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90
--查詢處理
SELECT Groups,
[Table]=SUM(CASE Item WHEN 'Table' THEN Quantity END),
[Cup]=SUM(CASE Item WHEN 'Cup' THEN Quantity END),
[Chair]=SUM(CASE Item WHEN 'Chair' THEN Quantity END),
[Blue]=SUM(CASE Color WHEN 'Blue' THEN Quantity END),
[Red]=SUM(CASE Color WHEN 'Red' THEN Quantity END),
[Green]=SUM(CASE Color WHEN 'Green' THEN Quantity END)
FROM @t
GROUP BY Groups
/*--結果
Groups Table Cup Chair Blue Red Green
--------- --------------- ---------------- ----------------- --------------- ---------------- ---------------
aa 124 NULL 11 225 -90 NULL
bb -23 -23 NULL NULL -23 -23
--*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -