日期:2014-05-17  浏览次数:20486 次

求助——SQL2000 【单列】转多列
本帖最后由 TSSCEO 于 2013-08-09 09:13:06 编辑

源表
姓名    日期      状态
张三   2013-8-9   正常
张三   2013-8-10   异常
张三   2013-8-11   正常
张三   2013-8-12   异常
张三   ……    ……


目标表
姓名   2013-8-9    2013-8-10      2013-8-11   2013-8-12   ……
张三   2013-8-9    2013-8-10    2013-8-11   2013-8-12   ……

要求:把源表日期列,转成多行(效果见目标表示例) ,求高人指导,谢谢。

------解决方案--------------------
create table test
(姓名 varchar(12),  日期 varchar(10), 状态 varchar(12))

insert into test
select '张三', '2013-8-9', '正常' union ALL
select '张三', '2013-8-10', '异常' union ALL
select '张三', '2013-8-11', '正常' union ALL
select '张三', '2013-8-12', '异常'
 
--楼主想要这样:
declare @sql varchar(max)
select @sql=isnull(@sql+',','') +'max(case when 日期='''+日期+''' then 日期 end) ['+日期+']'
from (select distinct 姓名,日期 from test) t
order by t.姓名
select @sql='select 姓名,'  +@sql +' from test group by 姓名 '
exec(@sql)

--还是这样:
declare @SQL1 varchar(max)
select @SQL1=isnull(@SQL1+',','') +'max(case when 日期='''+日期+''' then 状态 end) ['+日期+']'
from (select distinct 姓名,日期 from test) t
order by t.姓名
select @SQL1='select 姓名,'  +@SQL1 +' from test group by 姓名 '
exec(@SQL1)

------解决方案--------------------
行列转换,请参考:
http://blog.csdn.net/hdhai9451/article/details/5026933