请问如何使用grouping实现小计、合计问题?

echo_llee 2001-09-13 11:51:06
现有表table_name,字段有sail(记录销售情况,比如:打折、退货)、ISBN(记录商品编号,比如:00001 00002)、number记录数量、name记录商品名称。
现希望实现下述输出功能:
sail bh name number
打折 00001 铅笔 100
打折 00002 毛笔 200
打折 00003 油笔 300
小计 600
退货 00001 铅笔 -10
退货 00004 水彩笔 -50
小计 -60
合计 540
请问该如何写SQL语句?
...全文
203 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
karma 2001-09-14
  • 打赏
  • 举报
回复
try this in SQL Server:

select sail, bh, name, number
from table_name
order by sail
compute sum(number) by sail
mat 2001-09-14
  • 打赏
  • 举报
回复
如果是ORACLE中
select sail,bh,name,number from
((select sail,bh,name,number from table_sail
union all
select sail,'' bh,'小计' name,sum(number) number from table_sail group by sail)
union all
select '' sail,'' bh,'合计' name,sum(number) number from table_sail) a
order by sail,bh,name
一句就搞定了。
在SQL SERVER 中将union all 替换成union就可以了
smartdonkey 2001-09-14
  • 打赏
  • 举报
回复
我的新的做法
create table m(sail varchar(20),bh char(10),name varchar(20),number int)

insert into m(sail,bh,name,number) values('打折','00001','铅笔',100)
insert into m(sail,bh,name,number) values('打折','00002','毛笔',300)
insert into m(sail,bh,name,number) values('打折','00003','油笔',400)
insert into m(sail,bh,name,number) values('退货','00001','铅笔',-10)
insert into m(sail,bh,name,number) values('退货','00004','水彩笔',-50)

--查询
select k.sail,k.bh,m.name,k.number from (select
case
when bh is null then
case
when sail is null then
'总计' else '小计'
end
else
sail
end sail
,bh, sum(number ) number
from m
group by sail,bh with rollup) k left join m on k.bh=m.bh

这样完全能得到您的结果

smartdonkey 2001-09-14
  • 打赏
  • 举报
回复
select sail,name, sum(number )
from table_name
group by sail,name with rollup
xmao 2001-09-14
  • 打赏
  • 举报
回复
o
echo_llee 2001-09-14
  • 打赏
  • 举报
回复
我是希望用一句话就能实现,可是,我调不通呢,怎么回事?
marvellin 2001-09-14
  • 打赏
  • 举报
回复
楼上的oracle写法正确
pabulum 2001-09-13
  • 打赏
  • 举报
回复
用datareporter去进行分组合计吧

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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