27,579
社区成员
发帖
与我相关
我的任务
分享
declare @sql1 varchar(8000),@sql2 varchar(8000)
select
@sql1=isnull(@sql1+',','')
+'sum(case when unitname='''+unitname+''' then quantity else 0 end) as ['+unitname+']',
@sql2=isnull(@sql2+',','')
+'sum(case when unitname='''+unitname+''' then saleprice*quantity else 0 end) as ['+unitname+']'
from
(select distinct unitname from a_detail) t
set @sql1='select proname,'+@sql1+' from a_detail group by proname'
set @sql2='select productca+''合计'','+@sql2+' from a_detail group by productca'
exec (@sql1+' union all '+@sql2)
--生成测试数据
create table a_detail
(
unitname nvarchar(10),
productca nvarchar(10),
proname nvarchar(10),
quantity int,
saleprice int
)
insert a_detail select '技术部','固定资产','笔记本','9','10000'
insert a_detail select '技术部','固定资产','路由器','2','200'
insert a_detail select '研发部','固定资产','笔记本','15','9000'
insert a_detail select '研发部','固定资产','路由器','3','200'
insert a_detail select '研发部','固定资产','投影仪','1','2000'
insert a_detail select '测试部','固定资产','笔记本','4','9000'
insert a_detail select '测试部','耗材', '晒鼓' ,'6','150'
declare @sql varchar(8000)
set @sql = 'select * from ('
set @sql = @sql + 'select proname as product'
select @sql = @sql + ',sum(case unitname when '''+unitname+''' then quantity else 0 end) ['+unitname+']'
from (select distinct unitname from a_detail)U --把所有唯一的单位名称都列举出来
select @sql = @sql + ' from a_detail group by proname,productca'
set @sql = @sql + ' union all '
set @sql = @sql + 'select productca as product'
select @sql = @sql + ',max(case unitname when '''+unitname+''' then saleprice else 0 end ) ['+unitname+']'
from (select distinct unitname from a_detail)N
select @sql = @sql + ' from (select productca,unitname,sum(quantity*saleprice) as saleprice from a_detail group by unitname,productca) as T group by productca) as M'
exec (@sql)
drop table a_detail
product 测试部 技术部 研发部
---------- ----------- ----------- -----------
笔记本 4 9 15
路由器 0 2 3
投影仪 0 0 1
晒鼓 6 0 0
固定资产 36000 90400 137600
耗材 900 0 0
(6 行受影响)