首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

——SQL2000 【单列】转多列

2013-08-11 
求助——SQL2000 【单列】转多列本帖最后由 TSSCEO 于 2013-08-09 09:13:06 编辑源表姓名日期状态张三2013-8-9

求助——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  

热点排行