程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 如何理解行轉列(SQL),理解轉列sql

如何理解行轉列(SQL),理解轉列sql

編輯:MySQL綜合教程

如何理解行轉列(SQL),理解轉列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'))

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved