首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

交织表

2012-08-15 
交叉表[3DSource]表有三个字段Chid为int型Team,ChidDvlue1123.52221.22326.8交叉成Team1,2,3123.5221.226.

交叉表
[3DSource]表有三个字段Chid为int型
Team, Chid Dvlue
1 1 23.5
2 2 21.2
2 3 26.8
交叉成
Team 1, 2, 3
1 23.5
2 21.2 26.8

declare @s varchar(8000) 
set @s = ' '  
select @s = @s+ ','''+Chid+'''=max(case when Chid= '''+Chid+''' As VarChar then Sum(Dvalue) AS 值 end) ' 
from (select Cast(Chid As VarChar) As Chid from [3DSource] group by [3DSource].Chid) a
--print @s 

set @s='select Team '+@s+ ' from [3DSource] group by Team'
print @s
exec(@s)
有问题,该怎么处理整型字段

[解决办法]
declare @s varchar(8000)
set @s = ' '
select @s = @s+ ','''+Chid+'''=max(case when Chid= '''+LTRIM(Chid)+''' As VarChar then Sum(Dvalue) AS 值 end) '
from (select Cast(Chid As VarChar) As Chid from [3DSource] group by [3DSource].Chid) a
--print @s

set @s='select Team '+@s+ ' from [3DSource] group by Team'
print @s
exec(@s)
转成字符。如果LTRIM不行可以CONVERT强制
[解决办法]

SQL code
create table [3DSource](Team    int        not null, Chid    int        not null, Dvlue    float    null)insert into [3DSource]select 1,1,23.5 union allselect 2,2,21.2 union allselect 2,3,26.8 union alldeclare @s varchar(8000)  set @s = ' '   select @s = @s+ ',['+convert(varchar(8),Chid)+']=Sum(case when Chid= '+convert(varchar(8),Chid)+'  then Dvlue end)  '  from (select Cast(Chid As VarChar) As Chid from [3DSource] group by [3DSource].Chid) aprint 'select Team '+@s+ ' from [3DSource] group by Team'set @s='select Team '+@s+ ' from [3DSource] group by Team'print @sexec(@s)Team        1                      2                      3----------- ---------------------- ---------------------- ----------------------1           23.5                   NULL                   NULL2           NULL                   21.2                   26.8警告: 聚合或其他 SET 操作消除了空值。(2 行受影响)
[解决办法]
SQL code
declare @s varchar(8000)  set @s = ' '   select @s = isnull(@s+ ',','')+' Sum(case when Chid= '''+ltrim(Chid)+''' then (Dvalue) else 0 end) as ['+ltrim(Chid)+']'  from (select Cast(Chid As VarChar(10)) As Chid from [3DSource] group by [3DSource].Chid) a--print @s  set @s='select Team '+@s+ ' from [3DSource] group by Team'print @sexec(@s) 

热点排行