成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

shiina / 1601人閱讀

摘要:行轉(zhuǎn)列,列轉(zhuǎn)行行列轉(zhuǎn)換在做報(bào)表分析時(shí)還是經(jīng)常會(huì)遇到的,今天就說(shuō)一下如何實(shí)現(xiàn)行列轉(zhuǎn)換吧。列轉(zhuǎn)行假設(shè)我們有下表語(yǔ)文數(shù)學(xué)英語(yǔ)通過(guò)即可得到如下結(jié)果我們也可以使用下面方法得到同樣結(jié)果語(yǔ)文語(yǔ)文數(shù)學(xué)數(shù)學(xué)英語(yǔ)英語(yǔ)

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

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

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

行轉(zhuǎn)列

假如我們有下表:

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

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

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

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

SELECT name,
  MAX(
  CASE
    WHEN subject="語(yǔ)文"
    THEN score
    ELSE 0
  END) AS "語(yǔ)文",
  MAX(
  CASE
    WHEN subject="數(shù)學(xué)"
    THEN score
    ELSE 0
  END) AS "數(shù)學(xué)",
  MAX(
  CASE
    WHEN subject="英語(yǔ)"
    THEN score
    ELSE 0
  END) AS "英語(yǔ)"
FROM student
GROUP BY name

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

列轉(zhuǎn)行

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

SELECT *
FROM student1
UNPIVOT (
    score FOR subject IN ("語(yǔ)文","數(shù)學(xué)","英語(yǔ)")
)

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

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

SELECT
    NAME,
    "語(yǔ)文" AS subject ,
    MAX("語(yǔ)文") 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,
    "英語(yǔ)" AS subject ,
    MAX("英語(yǔ)") AS score
FROM student1 GROUP BY NAME

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18025.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<