佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > SQL行轉列、列轉行的簡單實現(xiàn)

SQL行轉列、列轉行的簡單實現(xiàn)

熱門標簽:Linux服務器 呼叫中心市場需求 地方門戶網(wǎng)站 鐵路電話系統(tǒng) 百度競價排名 AI電銷 服務外包 網(wǎng)站排名優(yōu)化

前言

行列轉換在做報表分析時還是經常會遇到的,今天就說一下如何實現(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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • mysql 行轉列和列轉行實例詳解
  • mysql 列轉行,合并字段的方法(必看)
  • mssql 數(shù)據(jù)庫表行轉列,列轉行終極方案
  • SQL行轉列和列轉行代碼詳解
  • mysql 列轉行的技巧(分享)
  • mysql列轉行以及年月分組實例
  • SQL知識點之列轉行Unpivot函數(shù)

標簽:湖南 衡水 仙桃 蘭州 黃山 崇左 湘潭 銅川

巨人網(wǎng)絡通訊聲明:本文標題《SQL行轉列、列轉行的簡單實現(xiàn)》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    舒城县| 郓城县| 巴林右旗| 灵寿县| 保靖县| 徐水县| 双江| 吴忠市| 乐亭县| 温泉县| 区。| 赤水市| 依兰县| 福州市| 凉城县| 江川县| 宿州市| 锦屏县| 新竹市| 铅山县| 昆明市| 出国| 格尔木市| 宁城县| 苍梧县| 斗六市| 石柱| 天祝| 加查县| 锦屏县| 成都市| 三穗县| 浦北县| 西乌珠穆沁旗| 叙永县| 陆川县| 武穴市| 固安县| 潢川县| 陇南市| 游戏|