declare @tb table
(
客户名称 varchar(20),
产品名称 varchar(20),
规格 varchar(20),
金额 int
)
insert @tb
select 'A客户', 'A名称', 'A规格', 100 union
select 'B客户', 'A名称', 'A规格', 200 union
select 'A客户', 'c名称', 'c规格', 100 union
select 'B客户', 'b名称', 'b规格', 800 union
select 'B客户', 'd名称', 'd规格', 1000
--查询
select (case when grouping(产品名称)=1 and grouping(客户名称)=1
then '总计'
when grouping(产品名称)=1
then 客户名称+'合计'
else 客户名称
end) as '客户名称'
,isnull(产品名称,'') as '产品名称'
,(case when grouping(产品名称)=1 then '' else max(规格) end) as '规格'
,sum(金额) as '金额'
from @tb t
group by 客户名称,产品名称
with rollup
order by 客户名称,产品名称
--结果
/*
客户名称 产品名称 规格 金额
------------------------ -------------------- -------------------- -----------
A客户 A名称 A规格 100
A客户 c名称 c规格 100
A客户合计 200
B客户 A名称 A规格 200
B客户 b名称 b规格 800
B客户 d名称 d规格 1000
B客户合计 2000
总计 2200
*/