34,590
社区成员
发帖
与我相关
我的任务
分享
select [分部]
,max(case when [名称]='数学' then [数量] else 0 end) [数学]
,max(case when [名称]='物理' then [数量] else 0 end) [物理]
,max(case when [名称]='语文' then [数量] else 0 end) [语文]
from(
select [分部],[名称],'数量'=sum([数量]) from tb group by [分部],[名称]
union all
select '分部'='合计',[名称],'数量'=sum([数量]) from tb group by [名称]
)a group by [分部]
order by case when [分部]='合计' then 1 else 0 end
--结果
分部 数学 物理 语文
---------- ----------- ----------- -----------
南京 84 94 74
上海 83 93 74
合计 167 187 148
(3 行受影响)
declare @sql varchar(8000)
select @sql = isnull(@sql,'') + ',sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'
from (select distinct 名称 from tb) as a
set @sql = 'select 分部'+@sql + ' from tb group by 分部 union all select ''合计'''+@sql+' from tb'
exec(@sql)
declare @sql varchar(8000)
set @sql = 'select sno=identity(int,1,1),isnull(分部,''合计'') as 分部 '
select @sql = @sql + ' , sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'
from (select distinct 名称 from tb) as a
set @sql = @sql + ' into ##tmp from tb group by 分部 with rollup'
exec(@sql)
select * from ##tmp
/**
sno 分部 数学 物理 语文
----------- ---------- ----------- ----------- -----------
1 南京 84 94 74
2 上海 83 93 74
3 合计 167 187 148
(3 行受影响)
**/