码迷,mamicode.com
首页 > 其他好文 > 详细

2005的行列转换

时间:2017-04-02 19:28:29      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:tail   for   union all   unp   arc   set   行列转换   sql   .net   

2005的行列转换:

create table ta(编号 int,人员 varchar(5), 年份 int,月份 int ,[1号] varchar(5), [2号] varchar(5),[3号] varchar(5),[4号] varchar(5))
insert ta select 1, ‘张三‘,2006, 1, ‘正常‘, ‘迟到‘, ‘迟到‘, ‘事假‘
union all select 2, ‘张三‘, 2006, 2, ‘迟到‘, ‘事假‘, ‘正常‘, ‘正常‘
union all select 3, ‘李四‘, 2006, 3, ‘正常‘, ‘正常‘, ‘正常‘, ‘正常‘
union all select 4, ‘王五‘, 2007, 5, ‘正常‘, ‘正常‘,‘正常‘, ‘正常‘

2005的列转行再行转列:
declare @sql varchar(4000)
select @sql=isnull(@sql+‘,‘,‘‘)+quotename(Orders)
from ta 
unpivot
(orders for [原因] in([1号],[2号],[3号],[4号])
)as tb group by Orders
--print @sql
set @sql=‘select 编号,人员,年份,月份,‘+@sql+
‘from (
select 编号,人员,年份,月份,原因,Orders
from ta
unpivot
(orders for [原因] in([1号],[2号],[3号],[4号])
)as tb 
)tmp
pivot
(count(原因) for Orders in(‘+@sql+‘)
)tmp2‘
--print @sql
exec(@sql)

编号          人员    年份          月份          迟到          事假          正常
----------- ----- ----------- ----------- ----------- ----------- -----------
1           张三    2006        1           2           1           1
2           张三    2006        2           1           1           2
3           李四    2006        3           0           0           4
4           王五    2007        5           0           0           4

(4 行受影响)

http://blog.csdn.net/roy_88/article/details/1509413

2005的行列转换

标签:tail   for   union all   unp   arc   set   行列转换   sql   .net   

原文地址:http://www.cnblogs.com/railgunman/p/6659544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!