摘要:行轉(zhuǎn)列,列轉(zhuǎn)行行列轉(zhuǎn)換在做報表分析時還是經(jīng)常會遇到的,今天就說一下如何實現(xiàn)行列轉(zhuǎn)換吧。列轉(zhuǎn)行假設(shè)我們有下表語文數(shù)學(xué)英語通過即可得到如下結(jié)果我們也可以使用下面方法得到同樣結(jié)果語文語文數(shù)學(xué)數(shù)學(xué)英語英語
SQL 行轉(zhuǎn)列,列轉(zhuǎn)行
行列轉(zhuǎn)換在做報表分析時還是經(jīng)常會遇到的,今天就說一下如何實現(xiàn)行列轉(zhuǎn)換吧。
行列轉(zhuǎn)換就是如下圖所示兩種展示形式的互相轉(zhuǎn)換
行轉(zhuǎn)列假如我們有下表:
SELECT * FROM student PIVOT ( 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 student GROUP BY name
使用 CASE WHEN 可以得到和 PIVOT 同樣的結(jié)果,沒有 PIVOT 簡單直觀。
列轉(zhuǎn)行假設(shè)我們有下表 student1
SELECT * FROM student1 UNPIVOT ( score FOR subject IN ("語文","數(shù)學(xué)","英語") )
通過 UNPIVOT 即可得到如下結(jié)果:
我們也可以使用下面方法得到同樣結(jié)果
SELECT NAME, "語文" AS subject , MAX("語文") AS score FROM student1 GROUP BY NAME UNION SELECT NAME, "數(shù)學(xué)" AS subject , MAX("數(shù)學(xué)") AS score FROM student1 GROUP BY NAME UNION SELECT NAME, "英語" AS subject , MAX("英語") AS score FROM student1 GROUP BY NAME
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/18025.html
閱讀 1459·2021-09-30 09:57
閱讀 1466·2021-09-09 09:33
閱讀 2219·2021-09-04 16:40
閱讀 1792·2021-09-01 10:50
閱讀 3233·2021-09-01 10:31
閱讀 2539·2019-08-30 15:56
閱讀 2969·2019-08-30 15:44
閱讀 3474·2019-08-29 17:29