日期:2014-05-19  浏览次数:20536 次

这样的显示需求,可以通过SQL语句或者过程实现不!?
表里面数据
项目1 200601 1 2 3
项目1 200602 0 0 0
项目1 200603 2 3 4
项目1 200604 3 3 0

项目2 200601 0 0 0
项目2 200602 0 0 0
项目2 200603 2 2 2
项目2 200604 3 3 3

项目3 200601 1 1 1
项目3 200602 0 0 0
项目3 200603 0 0 0
项目3 200604 3 2 1

显示方式
项目1 200601 200602 200603 200604
1 0 2 3
2 0 3 3
3 0 4 0

项目2 0 0 2 3
0 0 2 3
0 0 2 3

项目3 1 0 0 3
1 0 0 2
1 0 0 1



------解决方案--------------------
表就一个字段吗?

怎么数据和显示的结果找不出联系?说说规则吧

------解决方案--------------------
去找找行列转换的。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)