SQL如何行转列
对于T-SQL老手来说,行转列已不稀奇。但对于新手来说,对行转列的思维方式还很模糊。
        今天我要总结一下我所掌握的行转列的思维方式,以帮助有需要的朋友更清楚的理解行转列的方法。
行转列的理解方式:
- 01行转列前,所有列的筛选条件都一样,只是被分组了。 行转列后,每一列各有自己的筛选条件,筛选条件就是行转列前所分组的值。 
示例:
- 01源数据: SELECT user_name,dept_no FROM trm_user 
- 02要求统计每个部门下的人数: SELECT dept_no,count(1) AS 'count' FROM trm_user GROUP BY dept_no 
- 03行转列要求部门在第一行,第二行显示人数: 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 
对比:
- 01对比一下前面语句的不同,是否发现了什么? 
总结:
- 01行转列即是把行转列前的分行条件,分别作为行转列后的各列的筛选条件。 
扩展:
- 01易理解的写法: 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')) 
