27,579
社区成员
发帖
与我相关
我的任务
分享
create table tb(id int,name varchar(10),price int,class int)
insert into tb values(1 ,'k', 12 ,1)
insert into tb values(2 ,'f', 13 ,1)
insert into tb values(3 ,'e', 14 ,1)
insert into tb values(4 ,'q', 12 ,2)
insert into tb values(5 ,'w', 13 ,2)
insert into tb values(6 ,'r', 15 ,2)
insert into tb values(7 ,'h', 12 ,3)
insert into tb values(8 ,'j', 13 ,3)
insert into tb values(9 ,'k', 16 ,3)
go
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ',sum(case class when ''' + cast(class as varchar) + ''' then price else 0 end) [class_' + cast(class as varchar) + ']'
from (select distinct class from tb) as a
set @sql = 'select sum(price) class_sum ' + @sql + ' from tb'
exec(@sql)
drop table tb
/*
class_sum class_1 class_2 class_3
----------- ----------- ----------- -----------
120 39 40 41
*/
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ',max(case class when ''' + cast(class as varchar) + ''' then price else 0 end) [class_' + cast(class as varchar) + ']'
from (select distinct class from tb) as a
set @sql = 'select sum(price) class_sum ' + @sql + ' from tb'
exec(@sql)
declare @s varchar(8000);
set @s = '';
select @s = @s + ',sum(case when class='+rtrim(class)+' then price else 0 end) as class_'+rtrim(class)
from tb group by class;
exec('select sum(price)'+@s+' from tb')