当前位置: 代码迷 >> Sql Server >> 这样的显示需求,可以通过SQL语句或者过程实现不!解决思路
  详细解决方案

这样的显示需求,可以通过SQL语句或者过程实现不!解决思路

热度:70   发布时间:2016-04-27 21:46:02.0
这样的显示需求,可以通过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 @[email protected]+ ',@ '[email protected]+ ' varchar(8000) '
,@[email protected]+ ',@ '[email protected]+ '= ' 'ID= ' ' ' ' '+name+ ' ' ' ' ' ' ' '
,@[email protected]+ ' select @ '[email protected]+ '=@ '[email protected]+ '+ ' ',[ ' '+cast(ID as varchar)+ ' ']= ' ' ' ' ' '+cast(isnull([ '+name+ '], ' ' ' ')
as varchar)+ ' ' ' ' ' ' ' ' from test '
,@[email protected]+ '+ ' ' union all select ' '+@ '[email protected]
,@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 '[email protected]+ ' select '[email protected][email protected]+ ' exec( ' ' '[email protected]+ ') '
exec( 'declare '[email protected]+ ' select '[email protected][email protected]+ ' exec( ' ' '[email protected]+ ') ')

--删除测试数据
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)
  相关解决方案