怎样把做横列汇总报表?

abc_sk 2006-08-11 03:48:09
declare @b table (a int,f varchar(3),r_q datetime ,b decimal(14,2),c decimal(14,2))


insert into @b select 1,'a','2005-01-01',100,200 union all
select 2,'B','2005-01-02',100,200

union select 3,'B','2005-04-01',100,200

select * from @B

1 a 2005-01-01 00:00:00.000 100.00 200.00
2 B 2005-01-02 00:00:00.000 100.00 200.00
3 B 2005-04-01 00:00:00.000 100.00 200.00



变成:


2005-01-01 2005-01-02 2005-04-01
a 100 0 0
b 0 100 0
b 0 0 100
c 200 200 200
...全文
183 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyxfly 2006-08-11
  • 打赏
  • 举报
回复
create table B(a int,f varchar(3),r_q datetime ,b decimal(14,2),c decimal(14,2))


insert into B select 1,'a','2005-01-01',100,200 union all
select 2,'B','2005-01-02',100,200

union select 3,'B','2005-04-01',100,200

select * from B

Declare @S Varchar(8000),@s1 varchar(8000)
Select @S=''Select @S=@S+',SUM(Case r_q When '''+convert(varchar(10),r_q,120)+''' Then b Else 0 End) As '+'['+convert(varchar(10),r_q,120)+']'
From B
select @s1=''select @s1=@s1+',SUM(Case a When '''+rtrim(a)+''' Then c Else 0 End) As '+'['+rtrim(a)+']'
From B
Select @S1='Select [f]=''c'''+@S1+' From B group by c'
Select @S='Select B.f'+@S+' From B group by B.f,B.a union all '+@s1

EXEC(@S)
splory 2006-08-11
  • 打赏
  • 举报
回复
--try
create table crt(a int,f varchar(3),r_q datetime ,b decimal(14,2),c decimal(14,2))

insert into crt select 1,'a','2005-01-01',100,200
union select 2,'B','2005-01-02',100,200

union select 3,'B','2005-04-01',100,200

select * from crt --drop table crt


declare @sql nvarchar(4000),@sql1 varchar(4000)
set @sql ='select f'
select @sql = @sql +',sum(case convert(varchar(10),r_q,120) when'''+convert(varchar(10),x.r_q,120)+''' then isnull(b,0) end) ['+convert(varchar(10),x.r_q,120)+']'
from (select distinct convert(varchar(10),r_q,120) r_q from crt) as x
set @sql = @sql +' from crt group by convert(varchar(10),r_q,120),f '
set @sql1 =' union select ''c'''
select @sql1 = @sql1 +',sum(case convert(varchar(10),r_q,120) when'''+convert(varchar(10),x.r_q,120)+''' then isnull(c,0) end)'
from (select distinct convert(varchar(10),r_q,120) r_q from crt) as x
set @sql1 = @sql1 +' from crt '
exec(@sql+@sql1)
mugua604 2006-08-11
  • 打赏
  • 举报
回复
最后面的 c 是何物?
i9988 2006-08-11
  • 打赏
  • 举报
回复
这类问题太多了,不回答

34,837

社区成员

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

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