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

SQL数据库行列转换问题
数据库表T的结构为:
NAME   KJ    BZ          RQ
A      0    不正确      2013/12/3
A      1    存在问题    2013/12/1
B      1    正确       2013/12/1
B      0    注意       2013/12/3
B      1    可能       2013/12/2
A      1    行         2013/12/2
。。。。。

需要转化的表H结构如下:
NAME   KJ1    BZ1    KJ2    BZ2    KJ3    BZ3
A      1     存在问题   1     行       0    不正确
B      1     正确       1     可能     0    注意

T表A只允许一天填报一个,重复不能提交,KJ1,BZ1就是1日填写的数据,KJ2,BZ2是2日填写的数据,依次类推。。

感觉有点复杂,水平有限,请各位帮忙解决,谢谢。

------解决方案--------------------

create table 表T
(NAME varchar(10),KJ int,BZ varchar(10),RQ varchar(15))

insert into 表T
 select 'A',0,'不正确','2013/12/3' union all
 select 'A',1,'存在问题','2013/12/1' union all
 select 'B',1,'正确','2013/12/1' union all
 select 'B',0,'注意','2013/12/3' union all
 select 'B',1,'可能','2013/12/2' union all
 select 'A',1,'行','2013/12/2'


declare @tsql varchar(6000)

select @tsql=isnull(@tsql+',','')
            +'max(case when rn='+rtrim(number)+' then KJ else '''' end) ''KJ'+rtrim(number)+''', '
            +'max(case when rn='+rtrim(number)+' then BZ else '''' end) ''BZ'+rtrim(number)+''' '
  from master.dbo.spt_values
  where type='P' and number between 1 and
  (select max(c) from
   (select count(1) 'c' from 表T group by NAME) t)

select @tsql='select NAME,'+@tsql
     &nb