这样的显示需求,可以通过SQL语句或者过程实现不!?
表里面数据
项目1200601123
项目1200602000
项目1200603234
项目1200604330
项目2200601000
项目2200602000
项目2200603222
项目2200604333
项目3200601111
项目3200602000
项目3200603000
项目3200604321
显示方式
项目1200601200602200603200604
1023
2033
3040
项目20023
0023
0023
项目31003
1002
1001
[解决办法]
表就一个字段吗?
怎么数据和显示的结果找不出联系?说说规则吧
[解决办法]
去找找行列转换的。csdn的论坛上应该比较多的。
[解决办法]
参考:
--建立测试数据
if object_id( 'test ') is not null drop table test
create table test(ID int, 型号 nvarchar(20), 颜色 nvarchar(20),
上市时间 nvarchar(20), 参考价 int, 尺寸 varchar(20), 重量 int)
insert test
select 1, '诺基亚-1 ', '红色 ', '2004年1月 ', 1500, '118M ', 143 union all
select 2, '诺基亚-2 ', '金色 ', '2005年1月 ', 1400, '110M ', 140 union all
select 3, '诺基亚-3 ', '黑色 ', '2006年1月 ', 2000, '100M ', 100
--执行查询
select * from test
declare @s1 varchar(8000), @s2 varchar(8000), @s3 varchar(8000), @s5 varchar(8000), @i varchar(10)
select @s1= ' ',@s2= ' ',@s3= ' ',@s5= ' ',@i= '0 '
select @s1=@s1+ ',@ '+@i+ ' varchar(8000) '
,@s2=@s2+ ',@ '+@i+ '= ' 'ID= ' ' ' ' '+name+ ' ' ' ' ' ' ' '
,@s3=@s3+ ' select @ '+@i+ '=@ '+@i+ '+ ' ',[ ' '+cast(ID as varchar)+ ' ']= ' ' ' ' ' '+cast(isnull([ '+name+ '], ' ' ' ')
as varchar)+ ' ' ' ' ' ' ' ' from test '
,@s5=@s5+ '+ ' ' union all select ' '+@ '+@i
,@i=cast(@i as int)+1
from syscolumns
where object_id( 'test ')=id and name <> 'ID '
order by colid
select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,2,8000)
,@s5=substring(@s5,15,8000)
print 'declare '+@s1+ ' select '+@s2+@s3+ ' exec( ' ' '+@s5+ ') '
exec( 'declare '+@s1+ ' select '+@s2+@s3+ ' exec( ' ' '+@s5+ ') ')
--删除测试数据
drop table test
--查看结果
/*
ID 型号 颜色 上市时间 参考价 尺寸 重量
1 诺基亚-1 红色 2004年1月 1500 118M 143
2 诺基亚-2 金色 2005年1月 1400 110M 140
3 诺基亚-3 黑色 2006年1月 2000 100M 100
ID 1 2 3
型号 诺基亚-1 诺基亚-3 诺基亚-3
颜色 红色 金色 黑色
上市时间 2004年1月 2005年1月 2004年1月
参考价 1500 1400 2000
尺寸 118M 110M 100M
重量 143 140 100
*/
[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go
create table tb(
item varchar(10),
f1 varchar(10),
f2 int,
f3 int,
f4 int)
insert into tb(item,f1,f2,f3,f4) values( '项目1 ', '200601 ',1,2,3)
insert into tb(item,f1,f2,f3,f4) values( '项目1 ', '200602 ',0,0,0)
insert into tb(item,f1,f2,f3,f4) values( '项目1 ', '200603 ',2,3,4)
insert into tb(item,f1,f2,f3,f4) values( '项目1 ', '200604 ',3,3,0)
insert into tb(item,f1,f2,f3,f4) values( '项目2 ', '200601 ',0,0,0)
insert into tb(item,f1,f2,f3,f4) values( '项目2 ', '200602 ',0,0,0)
insert into tb(item,f1,f2,f3,f4) values( '项目2 ', '200603 ',2,2,2)
insert into tb(item,f1,f2,f3,f4) values( '项目2 ', '200604 ',3,3,3)
insert into tb(item,f1,f2,f3,f4) values( '项目3 ', '200601 ',1,1,1)
insert into tb(item,f1,f2,f3,f4) values( '项目3 ', '200602 ',0,0,0)
insert into tb(item,f1,f2,f3,f4) values( '项目3 ', '200603 ',0,0,0)
insert into tb(item,f1,f2,f3,f4) values( '项目3 ', '200604 ',3,2,1)
select * from
(
select item,
max(case when f1 = '200601 ' then f2 end) as '200601 ',
max(case when f1 = '200602 ' then f2 end) as '200602 ',
max(case when f1 = '200603 ' then f2 end) as '200603 ',
max(case when f1 = '200604 ' then f2 end) as '200604 '
from tb
group by item
union all
select item,
max(case when f1 = '200601 ' then f3 end) as '200601 ',
max(case when f1 = '200602 ' then f3 end) as '200602 ',
max(case when f1 = '200603 ' then f3 end) as '200603 ',
max(case when f1 = '200604 ' then f3 end) as '200604 '
from tb
group by item
union all
select item,
max(case when f1 = '200601 ' then f4 end) as '200601 ',
max(case when f1 = '200602 ' then f4 end) as '200602 ',
max(case when f1 = '200603 ' then f4 end) as '200603 ',
max(case when f1 = '200604 ' then f4 end) as '200604 '
from tb
group by item
) t
order by item
drop table tb
item 200601 200602 200603 200604
---------- ----------- ----------- ----------- -----------
项目1 1 0 2 3
项目1 2 0 3 3
项目1 3 0 4 0
项目2 0 0 2 3
项目2 0 0 2 3
项目2 0 0 2 3
项目3 1 0 0 1
项目3 1 0 0 2
项目3 1 0 0 3
(所影响的行数为 9 行)