--你的T表要有时间字段,然后传递过来:declare @s varchar(8000),@dtime varchar(10)
set @s='select 采购单位'
set @dtime='时间字段'
select @s=@s+',['+类别+']=sum(case 类别 when '''+类别+''' then 单价 else 0 end)'
from t group by 类别 order by 类别
set @s=@s+' from t where 时间字段='''+@dtime+''' group by 采购单位 order by 采购单位'
exec(@s)
set @s='select 采购单位'
set @dtime='时间字段'
select @s=@s+',['+类别+']=sum(case 类别 when '''+类别+''' then 单价 else 0 end)'
from t group by 类别 order by 类别
set @s=@s+' from t where 时间字段='''+@dtime+''' group by 采购单位 order by 采购单位'
exec(@s)
create table t(商品名称 varchar(20),单价 int,数量 int,类别 varchar(20),采购单位 varchar(20))
insert into t select 'cpu ',1500,2 ,'电脑类','科技大厦'
insert into t select '内存条',100 ,1 ,'电脑类','电脑公司'
insert into t select 'cpu ',1000,1 ,'电脑类','科技大厦'
insert into t select '油笔 ',5 ,5 ,'日常类','日用品公司'
insert into t select '电脑书',45 ,10,'书籍类','书店'
insert into t select '笔记本',100 ,1 ,'日常类','电脑公司'--动态SQLdeclare @s varchar(8000)
set @s='select 采购单位=case when grouping(采购单位)=1 then ''合计'' else 采购单位 end '
select @s=@s+',['+类别+']=sum(case 类别 when '''+类别+''' then 单价 else 0 end)'
from t group by 类别 order by 类别
set @s=@s+' ,[合计]=(select isnull(cast(sum(单价) as varchar),'''') from t where 采购单位=A.采购单位) from t A group by 采购单位 WITH ROLLUP '
print @s
exec(@s)--测试结果采购单位 电脑类 日常类 书籍类 合计
--------- -------- -------- ------------------
电脑公司 100 100 0 200
科技大厦 2500 0 0 2500
日用品公司0 5 0 5
书店 0 0 45 45
合计 2600 105 45
--删除测试环境Drop table T
drop table t
create table t(商品名称 varchar(20),单价 int,数量 int,类别 varchar(20),采购单位 varchar(20))
insert into t select 'cpu ',1500,2 ,'电脑类','科技大厦'
insert into t select '内存条',100 ,1 ,'电脑类','电脑公司'
insert into t select 'cpu ',1000,1 ,'电脑类','科技大厦'
insert into t select '油笔 ',5 ,5 ,'日常类','日用品公司'
insert into t select '电脑书',45 ,10,'书籍类','书店'
insert into t select '笔记本',100 ,1 ,'日常类','电脑公司'
declare @sql varchar(8000)
select @sql = 'select case when grouping(采购单位)=0 then 采购单位 else ''合计'' end as 采购单位'
select @sql = @sql+',['+类别+']=isnull(sum(case when 类别='''+类别+''' then 单价 end),0)'
from t group by 类别
select @sql=@sql+',sum(单价) as 合计 from t group by 采购单位 with rollup'exec(@sql)
drop table t采购单位 电脑类 日常类 书籍类 合计
-------------------- ----------- ----------- ----------- -----------
电脑公司 100 100 0 200
科技大厦 2500 0 0 2500
日用品公司 0 5 0 5
书店 0 0 45 45
合计 2600 105 45 2750警告: 聚合或其它 SET 操作消除了空值。