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 @sqlset @sql='select 编号,人员,年份,月份,'+@sql+'from (select 编号,人员,年份,月份,原因,Ordersfrom taunpivot(orders for [原因] in([1号],[2号],[3号],[4号]))as tb )tmppivot(count(原因) for Orders in('+@sql+'))tmp2'--print @sqlexec(@sql)
编号 人员 年份 月份 迟到 事假 正常----------- ----- ----------- ----------- ----------- ----------- -----------1 张三 2006 1 2 1 12 张三 2006 2 1 1 23 李四 2006 3 0 0 44 王五 2007 5 0 0 4
(4 行受影响)