SQL行轉(zhuǎn)列、列轉(zhuǎn)行的簡單實(shí)現(xiàn)
前言
行列轉(zhuǎn)換在做報(bào)表分析時(shí)還是經(jīng)常會(huì)遇到的,今天就說一下如何實(shí)現(xiàn)行列轉(zhuǎn)換吧。
行列轉(zhuǎn)換就是如下圖所示兩種展示形式的互相轉(zhuǎn)換
行轉(zhuǎn)列
假如我們有下表:
SELECT * FROM student PIVOT ( SUM(score) FOR subject IN (語文, 數(shù)學(xué), 英語) )
通過上面 SQL 語句即可得到下面的結(jié)果
PIVOT 后跟一個(gè)聚合函數(shù)來拿到結(jié)果,F(xiàn)OR 后面跟的科目是我們要轉(zhuǎn)換的列,這樣的話科目中的語文、數(shù)學(xué)、英語就就被轉(zhuǎn)換為列。IN 后面跟的就是具體的科目值。
當(dāng)然我們也可以用 CASE WHEN 得到同樣的結(jié)果,就是寫起來麻煩一點(diǎn)。
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
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。
相關(guān)文章
14種SQL的進(jìn)階用法分享(更高效地處理數(shù)據(jù))
在實(shí)際的數(shù)據(jù)庫使用中除了CRUD還有很多高級應(yīng)用值得學(xué)習(xí)和掌握,能夠在平時(shí)的工作中得到很多便利,這篇文章主要給大家分享介紹了14種SQL的進(jìn)階用法,通過文中介紹的方法可以更高效地處理數(shù)據(jù)庫數(shù)據(jù),需要的朋友可以參考下2024-01-01介紹PostgreSQL中的jsonb數(shù)據(jù)類型
這篇文章主要介紹了介紹PostgreSQL中的jsonb數(shù)據(jù)類型,jsonb是PostgreSQL9.4中開始內(nèi)置的類型,能夠支持GIN索引,需要的朋友可以參考下2015-04-04sql中l(wèi)eft join的效率分析與提高效率方法
網(wǎng)站隨著數(shù)據(jù)量與訪問量越來越大,訪問的速度變的越來越慢,于是開始想辦法解決優(yōu)化速度慢的原因,下面是對程序中一條sql的分析與提高效率的過程2018-03-03數(shù)據(jù)庫分頁查詢語句數(shù)據(jù)庫查詢
關(guān)于分頁 SQL 的資料許多,有的使用存儲(chǔ)過程,有的使用游標(biāo)。本人不喜歡使用游標(biāo),我覺得它耗資、效率低;使用存儲(chǔ)過程是個(gè)不錯(cuò)的選擇,因?yàn)榇鎯?chǔ)過程是顛末預(yù)編譯的,執(zhí)行效率高,也更靈活2014-08-08數(shù)據(jù)庫中的左連接(left join)和右連接(right join)區(qū)別
關(guān)于左連接和右連接總結(jié)性的一句話,左連接 where只影向右表,右連接where只影響左表2012-06-06