2005的行列转换

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 行受影响)

你可能感兴趣的:(行列转换)