sql group by的问题

yp_zhou 2008-07-22 10:04:41
请问sql中能不能实现这样的功能:
我有一个表,比如里面存储的有
客户 车型 品番 产量
广州丰田 334W 1 1000
广州丰田 334W 2 1000
广州丰田 441W 3 1000
广州本田 515L 4 1500

现在要实现这样的效果
广州丰田 334W 1 1000
广州丰田 334W 2 1000
小计 2000
广州丰田 441W 3 1000
广州丰田总计 3000
广州本田 515L 4 1500
广州本田总计 1500
请问有没有什么好的方法呢?
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgxyz 2008-07-22
  • 打赏
  • 举报
回复
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 行)
*/
lgxyz 2008-07-22
  • 打赏
  • 举报
回复
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 行)
*/
中国风 2008-07-22
  • 打赏
  • 举报
回复
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))
中国风 2008-07-22
  • 打赏
  • 举报
回复
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 個資料列受到影響)

中国风 2008-07-22
  • 打赏
  • 举报
回复
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 個資料列受到影響)

yp_zhou 2008-07-22
  • 打赏
  • 举报
回复
我下了一个水晶报表9,可是不太会用啊,有谁教教我啊
加我skyp: yp_zhou0924
谢谢
ojuju10 2008-07-22
  • 打赏
  • 举报
回复
用报表控件去做吧

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧