小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[轉]DB2行列轉換pivot/unpivot

 WindySky 2011-03-15
DB2行列轉換pivot/unpivot
2009-10-23 08:58
作者介紹Chris Eaton
行轉列
給出下面的數(shù)據(jù):
CREATE TABLE Sales (Year INT, Quarter INT, Results INT)
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
想要的到結果:
YEAR Q1 Q2 Q3 Q4
----------- ----------- ----------- ----------- -----------
2004 20 30 15 10
2005 18 40 12 27
這個SQL就可解決這個問題:
SELECT Year,
MAX(CASE WHEN Quarter = 1
THEN Results END) AS Q1,
MAX(CASE WHEN Quarter = 2
THEN Results END) AS Q2,
MAX(CASE WHEN Quarter = 3
THEN Results END) AS Q3,
MAX(CASE WHEN Quarter = 4
THEN Results END) AS Q4
FROM Sales
GROUP BY Year
解釋一下為什么要加max的原因,因為不加max的話結果會是這樣:
YEAR Q1 Q2 Q3 Q4
----------- ----------- ----------- ----------- -----------
2004 20 - - -
2004 - 30 - -
2004 - - 15 -
2004 - - - 10
2005 18 - - -
2005 - 40 - -
2005 - - 12 -
2005 - - - 27
列轉行
給出下面數(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

想要的結果
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);

下面解釋一下執(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)生了關系,取出了表中的一列作為數(shù)據(jù).

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多