交叉表

lixingkai0 2012-07-11 04:52:43
[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)
有问题,该怎么处理整型字段
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixingkai0 2012-07-11
  • 打赏
  • 举报
回复
非常感谢两位,问题解决
SQL77 2012-07-11
  • 打赏
  • 举报
回复
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 @s
exec(@s)


第一个MAX里面有SUM是会有问题的。你自己看着再改。
lixingkai0 2012-07-11
  • 打赏
  • 举报
回复
from (select Cast(Chid As VarChar) As Chid from [3DSource] group by [3DSource].Chid) a
这句的Cast(Chid As VarChar) As Chid好象有问题我不知道怎么处理
天-笑 2012-07-11
  • 打赏
  • 举报
回复


create table [3DSource]
(Team int not null,
Chid int not null,
Dvlue float null
)
insert into [3DSource]
select 1,1,23.5 union all
select 2,2,21.2 union all
select 2,3,26.8 union all

declare @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) a
print 'select Team '+@s+ ' from [3DSource] group by Team'

set @s='select Team '+@s+ ' from [3DSource] group by Team'
print @s
exec(@s)
Team 1 2 3
----------- ---------------------- ---------------------- ----------------------
1 23.5 NULL NULL
2 NULL 21.2 26.8
警告: 聚合或其他 SET 操作消除了空值。

(2 行受影响)


SQL77 2012-07-11
  • 打赏
  • 举报
回复
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强制

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧