日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SQL 行轉(zhuǎn)列,列轉(zhuǎn)行

 L羅樂 2019-05-22

行列轉(zhuǎn)換在做報表分析時還是經(jīng)常會遇到的,今天就說一下如何實現(xiàn)行列轉(zhuǎn)換吧。

行列轉(zhuǎn)換就是如下圖所示兩種展示形式的互相轉(zhuǎn)換

行轉(zhuǎn)列

假如我們有下表:

SELECT *FROM studentPIVOT ( SUM(score) FOR subject IN (語文, 數(shù)學(xué), 英語))

通過上面 SQL 語句即可得到下面的結(jié)果

PIVOT 后跟一個聚合函數(shù)來拿到結(jié)果,F(xiàn)OR 后面跟的科目是我們要轉(zhuǎn)換的列,這樣的話科目中的語文、數(shù)學(xué)、英語就就被轉(zhuǎn)換為列。IN 后面跟的就是具體的科目值。

當(dāng)然我們也可以用 CASE WHEN 得到同樣的結(jié)果,就是寫起來麻煩一點。

SELECT name,  MAX(  CASE    WHEN subject='語文'    THEN score    ELSE 0  END) AS '語文',  MAX(  CASE    WHEN subject='數(shù)學(xué)'    THEN score    ELSE 0  END) AS '數(shù)學(xué)',  MAX(  CASE    WHEN subject='英語'    THEN score    ELSE 0  END) AS '英語'FROM studentGROUP BY name

使用 CASE WHEN 可以得到和 PIVOT 同樣的結(jié)果,沒有 PIVOT 簡單直觀。

列轉(zhuǎn)行

假設(shè)我們有下表 student1

SELECT *FROM student1UNPIVOT ( score FOR subject IN ('語文','數(shù)學(xué)','英語'))

通過 UNPIVOT 即可得到如下結(jié)果:

我們也可以使用下面方法得到同樣結(jié)果

SELECT    NAME,    '語文' AS subject ,    MAX('語文') AS scoreFROM student1 GROUP BY NAMEUNIONSELECT    NAME,    '數(shù)學(xué)' AS subject ,    MAX('數(shù)學(xué)') AS scoreFROM student1 GROUP BY NAMEUNIONSELECT    NAME,    '英語' AS subject ,    MAX('英語') AS scoreFROM student1 GROUP BY NAME

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多