亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

SQL 行轉列,列轉行

shiina / 1654人閱讀

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

SQL 行轉列,列轉行

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

行列轉換就是如下圖所示兩種展示形式的互相轉換

行轉列

假如我們有下表:

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

通過上面 SQL 語句即可得到下面的結果

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

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

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 student
GROUP BY name

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

列轉行

假設我們有下表 student1

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

通過 UNPIVOT 即可得到如下結果:

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

SELECT
    NAME,
    "語文" AS subject ,
    MAX("語文") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
    NAME,
    "數(shù)學" AS subject ,
    MAX("數(shù)學") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
    NAME,
    "英語" AS subject ,
    MAX("英語") AS score
FROM student1 GROUP BY NAME

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/18025.html

相關文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<