SQL数据库行列转换有关问题
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日填写的数据,依次类推。。
感觉有点复杂,水平有限,请各位帮忙解决,谢谢。
------解决方案--------------------
------解决方案--------------------
数据库表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
+' from (select NAME,KJ,BZ,
row_number() over(partition by NAME order by RQ) ''rn''
from 表T) t
group by NAME'
exec(@tsql)
/*
NAME KJ1 BZ1 KJ2 BZ2 KJ3 BZ3
---------- ----------- ---------- ----------- ---------- ----------- ----------
A 1 存在问题 1 行 0 不正确
B 1 正确 1 可能 0 注意
(2 row(s) affected)
*/
------解决方案--------------------
create table t(NAME varchar(10), KJ int, BZ varchar(20), RQ datetime)