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

分享

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ù)學, 英語))

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

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

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

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

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

列轉(zhuǎn)行

假設我們有下表 student1

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

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

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多