如何理解行轉列(SQL)


對於老手來說,行轉列已不稀奇。但對於新手來說,對行轉列的思維方式還很模糊。

今天我要總結一下我所掌握的行轉列的思維方式,以幫助有需要的朋友更清楚的理解行轉列的方法。

 

行轉列的理解方式:

行轉列前,所有列的篩選條件都一樣,只是被分組了。

行轉列后,每一列各有自己的篩選條件,篩選條件就是行轉列前所分組的值。

 

示例:

源數據:

SELECT user_name,dept_no FROM trm_user

 

要求統計每個部門下的人數:

SELECT

dept_no,count(1) AS 'count'

FROM trm_user

GROUP BY dept_no

 

行轉列要求部門在第一行,第二行顯示人數:

SELECT 'ATD','MACAU','AIAPT'

UNION all

select

convert(VARCHAR,count(CASE WHEN dept_no='ATD' THEN 1 END)),

convert(VARCHAR,count(CASE WHEN dept_no='MACAU' THEN 1 END)),

convert(VARCHAR,count(CASE WHEN dept_no='AIAPT' THEN 1 END))

FROM trm_user

 

 對比:

 

總結:

行轉列即是把行轉列前的分行條件,分別作為行轉列后的各列的篩選條件。

擴展:

易理解的寫法:

SELECT 'ATD','MACAU','AIAPT'

UNION all

SELECT

convert(VARCHAR,(SELECT count(1) FROM trm_user WHERE dept_no='ATD')),

convert(VARCHAR,(SELECT count(1) FROM trm_user WHERE dept_no='MACAU')),

convert(VARCHAR,(SELECT count(1) FROM trm_user WHERE dept_no='AIAPT'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM