按客户分类统计

来源:互联网 发布:linux中vi后如何退出 编辑:程序博客网 时间:2024/06/10 04:54

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
*/

原创粉丝点击