DB2列轉(zhuǎn)行的實現(xiàn)
DB2列轉(zhuǎn)行是我們很常見的操作,下面就為您詳細介紹DB2列轉(zhuǎn)行的步驟,如果您對DB2列轉(zhuǎn)行方面感興趣的話,不妨一看。
給出下面數(shù)據(jù)
CREATE TABLE SalesAgg
( year INTEGER,
q1 INTEGER,
q2 INTEGER,
q3 INTEGER,
q4 INTEGER );
YEAR Q1 Q2 Q3 Q4
----------- ----------- ----------- ----------- -----------
2004 20 30 15 10
2005 18 40 12 27
想要的結(jié)果
YEAR QUARTER RESULTS
----------- ----------- -----------
2004 1 20
2004 2 30
2004 3 15
2004 4 10
2005 1 18
2005 2 40
2005 3 12 2005 4 27
這個SQL就可以實現(xiàn):
SELECT S.Year, Q.Quarter, Q.Results
FROM SalesAgg AS S,
TABLE (VALUES(1, S.q1),
(2, S.q2),
(3, S.q3),
(4, S.q4))
AS Q(Quarter, Results);
每個values中對應(yīng)列的數(shù)據(jù)類型必須相同,值可以任意,如1,2,3,4都是整形下面解釋一下執(zhí)行的過程:核心是用table函數(shù)創(chuàng)建了一個表,這個表是用value實現(xiàn)的多行表,value實現(xiàn)虛表的例子:
db2 => select * from (values (1,2),(2,3)) as t1(col1,col2)
COL1 COL2
----------- -----------
1 2
2 3
2 條記錄已選擇。
db2 => select * from (values 1) as a
1
-----------
1
1 條記錄已選擇。
所不同的是這里跟from子句中的一個表產(chǎn)生了關(guān)系,取出了表中的一列作為數(shù)據(jù)。
【編輯推薦】