22,207
社区成员
发帖
与我相关
我的任务
分享
DECLARE @TB TABLE(客户 varchar(10),车型 varchar(10),品牌 VARCHAR(10),产量 int)
INSERT @TB SELECT '广州丰田','334W','1',1000
UNION ALL SELECT '广州丰田','334W','2',1000
UNION ALL SELECT '广州丰田','441W','3',1000
UNION ALL SELECT '广州本田','515L','4',1500
--统计
SELECT 客户,车型,品牌,产量
FROM(
--明细
SELECT 客户='',车型='',品牌='',产量='',s1='',s2='',s3=''
UNION ALL
SELECT 客户,车型,品牌,产量
,s1='0',s2=车型,s3='0'
FROM @TB
UNION ALL
--各车型合计
SELECT '',客户+':'+车型,'',产量=SUM(产量)
,s1='0',s2=车型,s3='1'
FROM @TB
GROUP BY 客户,车型
) A
WHERE 产量<>0
ORDER BY s1,s2,s3
/*
客户 车型 品牌 产量
---------- --------------------- ---------- -----------
广州丰田 334W 1 1000
广州丰田 334W 2 1000
广州丰田:334W 2000
广州丰田 441W 3 1000
广州丰田:441W 1000
广州本田 515L 4 1500
广州本田:515L 1500
(所影响的行数为 7 行)
*/
DECLARE @TB TABLE(客户 varchar(10),车型 varchar(6),品牌 VARCHAR(10),产量 int)
INSERT @TB SELECT '广州丰田','334W','1',1000
UNION ALL SELECT '广州丰田','334W','2',1000
UNION ALL SELECT '广州丰田','441W','3',1000
UNION ALL SELECT '广州本田','515L','4',1500
--分组统计
SELECT 客户=CASE
WHEN GROUPING(品牌)=0 THEN 客户
WHEN GROUPING(客户)=1 THEN '总计'
ELSE '' END,
车型=CASE
WHEN GROUPING(品牌)=0 THEN 车型
WHEN GROUPING(车型)=1 AND GROUPING(客户)=0 THEN 客户+' 合计'
ELSE '' END,
品牌=CASE
WHEN GROUPING(品牌)=0 THEN 品牌
WHEN GROUPING(品牌)=1 AND GROUPING(车型)=0 THEN 车型+' 小计'
ELSE '' END,
产量=SUM(产量)
FROM @TB
GROUP BY 客户,车型,品牌 WITH ROLLUP
/*
客户 车型 品牌 产量
---------- --------------- ----------- -----------
广州本田 515L 4 1500
515L 小计 1500
广州本田 合计 1500
广州丰田 334W 1 1000
广州丰田 334W 2 1000
334W 小计 2000
广州丰田 441W 3 1000
441W 小计 1000
广州丰田 合计 3000
总计 4500
(所影响的行数为 10 行)
*/
declare @T table([客户] nvarchar(4),[车型] nvarchar(4),[品番] int,[产量] int)
Insert @T
select N'广州丰田',N'334W',1,1000 union all
select N'广州丰田',N'334W',2,1000 union all
select N'广州丰田',N'441W',3,1000 union all
select N'广州本田',N'515L',4,1500
Select
[客户],[车型]=case when grouping([车型])=1 then [客户]+N'合計' when grouping([品番])=1 then N'小計' else [车型] end,
[品番]=case when grouping([品番])=1 or grouping([车型])=1 then '' else rtrim([品番]) end,sum([产量])[产量]--加上別名
from
@T
group by [客户],[车型],[品番],[产量] with rollup
having not(( grouping([产量])=1 and grouping([品番])=0 ) or(grouping([客户])=1))
declare @T table([客户] nvarchar(4),[车型] nvarchar(4),[品番] int,[产量] int)
Insert @T
select N'广州丰田',N'334W',1,1000 union all
select N'广州丰田',N'334W',2,1000 union all
select N'广州丰田',N'441W',3,1000 union all
select N'广州本田',N'515L',4,1500
Select
[客户],[车型]=case when grouping([车型])=1 then [客户]+N'合計' when grouping([品番])=1 then N'小計' else [车型] end,
[品番]=case when grouping([品番])=1 or grouping([车型])=1 then '' else rtrim([品番]) end,sum([产量])
from
@T
group by [客户],[车型],[品番],[产量] with rollup
having not(( grouping([产量])=1 and grouping([品番])=0 ) or(grouping([客户])=1))
客户 车型 品番
---- ------ ------------ -----------
广州丰田 334W 1 1000
广州丰田 334W 2 1000
广州丰田 小計 2000
广州丰田 441W 3 1000
广州丰田 小計 1000
广州丰田 广州丰田合計 3000
广州本田 515L 4 1500
广州本田 小計 1500
广州本田 广州本田合計 1500
(9 個資料列受到影響)
declare @T table([客户] nvarchar(4),[车型] nvarchar(4),[品番] int,[产量] int)
Insert @T
select N'广州丰田',N'334W',1,1000 union all
select N'广州丰田',N'334W',2,1000 union all
select N'广州丰田',N'441W',3,1000 union all
select N'广州本田',N'515L',4,1500
Select
[客户],[车型]=case when grouping([车型])=1 then N'合計' when grouping([品番])=1 then N'小計' else [车型] end,
[品番]=case when grouping([品番])=1 or grouping([车型])=1 then '' else rtrim([品番]) end,sum([产量])
from
@T
group by [客户],[车型],[品番],[产量] with rollup
having not(( grouping([产量])=1 and grouping([品番])=0 ) or(grouping([客户])=1))
客户 车型 品番
---- ---- ------------ -----------
广州丰田 334W 1 1000
广州丰田 334W 2 1000
广州丰田 小計 2000
广州丰田 441W 3 1000
广州丰田 小計 1000
广州丰田 合計 3000
广州本田 515L 4 1500
广州本田 小計 1500
广州本田 合計 1500
(9 個資料列受到影響)