有这么一个视图表
信息ID 所述栏目 所属部门 积分
1 公告栏 部门a 1
2 综合信息 部门b 2
3 图片新闻 部门c 1
4 公告栏 部门a 1
5 图片新闻 部门a 1
。用户要求列出每个部门的每个栏目积分表,也就是变成了这样栏目名称 部门a 部门b 部门c 合计
公告栏 1 2 3 6
图片新闻 2 4 5 11
综合信息 4 3 1 8
合计 7 9 9 25我想知道这能用一个sql列出来吗,如果能得话,如何列出来呀,对我来说太难了
信息ID 所述栏目 所属部门 积分
1 公告栏 部门a 1
2 综合信息 部门b 2
3 图片新闻 部门c 1
4 公告栏 部门a 1
5 图片新闻 部门a 1
。用户要求列出每个部门的每个栏目积分表,也就是变成了这样栏目名称 部门a 部门b 部门c 合计
公告栏 1 2 3 6
图片新闻 2 4 5 11
综合信息 4 3 1 8
合计 7 9 9 25我想知道这能用一个sql列出来吗,如果能得话,如何列出来呀,对我来说太难了
SET @s = ''
SELECT @s = @s + ',' + quotename([bumen_name])
+ '=sum(case when [bumen_name]=' + quotename([bumen_name], '''')
+ ' then [jf] else 0 end)'
FROM jftj1
GROUP BY [bumen_name], [bumen_px]
ORDER BY [bumen_px] ASC
EXEC ('select [lm_name] as 栏目' + @s + ',[总积分]=sum([jf]) from jftj1 group by [lm_name],[lm_px] order by [lm_px] asc')
你不是在ASP里嘛,只要 rs(0),rs(1),rs(2),..... 就能直接得到各列的值了.
if object_id('tb') is not null
drop table tb
go
create table tb
(
信息ID int identity(1,1),
所述栏目 varchar(10),
所属部门 varchar(10),
积分 int
)
go
insert into tb(所述栏目,所属部门,积分)
select '公告栏','部门a',1 union all
select '综合信息','部门b',2 union all
select '图片新闻','部门c',1 union all
select '公告栏','部门a',1 union all
select '图片新闻','部门a',1
go
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
select @sql1=isnull(@sql1+',','')+'['+所属部门+']=sum(case when 所属部门='''+所属部门+''' then 积分 else 0 end)',@sql2=isnull(@sql2+',','')+'(select sum(积分) from tb where 所属部门='''+所属部门+''')' from (select distinct 所属部门 from tb)t
exec('select 所述栏目,'+@sql1+',合计=sum(积分) from tb group by 所述栏目'+
' union all '+
'select ''合计'','+@sql2+',(select sum(积分) from tb)')
/*
结果数据
所述栏目 部门a 部门b 部门c 合计
---------- ----------- ----------- ----------- -----------
公告栏 2 0 0 2
图片新闻 1 0 1 2
综合信息 0 2 0 2
合计 3 2 1 6(4 行受影响)*/