分组汇总的问题

ldqh 2005-05-06 01:03:12
有四个表

订单表 退单表
id 订单号 物品数 营业员ID id 原订单号 物品数(退) 营业员ID



营业员表 城市表
id 营业员 城市ID id 城市



要汇总成为:
城市 订单数 物品数 退单数 退物品数




我只会写订单或退单的汇总,如下
select cs.城市,count(dd.id) as'订单数',sum(dd.物品数) as'物品数'
from 订单表 dd, 营业员表 yyy, 城市表 cs
where dd.营业员ID = yyy.id and yyy.城市ID = cs.id
group by cs.城市

订单和退单合在一起汇总我就不会写了,请大家帮忙。。。。。。。




...全文
215 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqianlong 2005-05-07
  • 打赏
  • 举报
回复
UP
Comer 2005-05-07
  • 打赏
  • 举报
回复
是不是你表中的数据的对应关系本身就有问题呀!!!
ldqh 2005-05-07
  • 打赏
  • 举报
回复
数据不对呀
huobr 2005-05-06
  • 打赏
  • 举报
回复
--简单测了一下,应该没问题
select max(a.城市) as 城市,count(c.订单号) as 订单数 ,sum(c.物品数) as 物品数,
count(d.原订单号) as 退单数 ,sum(d.物品数) as 退物品数
from 城市表 a left join 营业员表 b on b.城市ID = a.城市ID
left join
(select 订单号,营业员ID,sum(物品数) as 物品数 from 订单表
group by 订单号,营业员ID) c on b.营业员ID = c.营业员ID
left join
(select 原订单号,营业员ID,sum(物品数退) as 物品数 from 退单表
group by 原订单号,营业员ID) d on b.营业员ID = d.营业员ID

group by a.城市ID
ldqh 2005-05-06
  • 打赏
  • 举报
回复
还是不行,数据不对....
单个订单表汇总测试结果为:
城市 订单数 物品数
沈阳 6 188
大连 91 827

单个退单表汇总测试结果为:
城市 退单数 物品数(退)
沈阳 2 15
大连 41 439

和起来的测试结果为:
城市 订单数 物品数 退单数 物品数(退)
沈阳 12 376 12 90
大连 3731 33907 3731 39949

汇总的数据不正确,哎~~~~~
chenqianlong 2005-05-06
  • 打赏
  • 举报
回复
設計表太多了?
Comer 2005-05-06
  • 打赏
  • 举报
回复
只做了一组数据的测试,我的和邹老大的结果是一样的

不知道数据很多,很复杂的情况下,我的sql语句能不能经得住考验

望楼主给个回复
Comer 2005-05-06
  • 打赏
  • 举报
回复
邹老大的(漏了二个字母"D"):

select cs.城市,
isnull(a.订单数,0) as '订单数',
isnull(a.物品数,0) as '物品数',
isnull(b.退单数,0) as '退单数',
isnull(b.退物品数,0) as '退物品数'
from 城市表 cs
left join (
select yyy.城市ID,count(dd.id) as'订单数',sum(dd.物品数) as'物品数'
from 订单表 dd, 营业员表 yyy
where dd.营业员ID = yyy.id
group by yyy.城市ID
)a on cs.id=a.城市ID
left join (
select yyy.城市ID,count(td.id) as'退单数',sum(td.物品数) as'退物品数'
from 退单表 td, 营业员表 yyy
where td.营业员ID = yyy.id
group by yyy.城市ID
)b on cs.id=b.城市ID
zjcxc 元老 2005-05-06
  • 打赏
  • 举报
回复
select cs.城市,
isnull(a.订单数,0) as '订单数',
isnull(a.物品数,0) as '物品数',
isnull(b.退单数,0) as '退单数',
isnull(b.退物品数,0) as '退物品数'
from 城市表 cs
left join (
select yyy.城市ID,count(dd.id) as'订单数',sum(dd.物品数) as'物品数'
from 订单表 dd, 营业员表 yyy
where dd.营业员ID = yyy.id
group by yyy.城市ID
)a on cs.id=a.城市ID
left join (
select yyy.城市I,count(td.id) as'退单数',sum(td.物品数) as'退物品数'
from 退单表 td, 营业员表 yyy
where td.营业员ID = yyy.id
group by yyy.城市I
)b on cs.id=b.城市ID
Comer 2005-05-06
  • 打赏
  • 举报
回复
select d.城市, count(a.id) as 订单数, sum(a.物品数) as 物品数, count(b.id) as 退单数, sum(b.物品数) as 退物品数
from 订单表 a, 退单表 b, 营业员表 c, 城市表 d
where c.id = a.营业员ID and c.id = b.营业员ID and d.id = c.城市ID
and a.id = b.原订单号
group by d.城市
ldqh 2005-05-06
  • 打赏
  • 举报
回复
不行啊~~~~
llbd 2005-05-06
  • 打赏
  • 举报
回复
select a.城市,count(c.订单号) as 订单数 ,sum(c.物品数) as 物品数,
count(d.原订单号) as 退单数 ,sum(d.物品数) as 退物品数
这样就不错啊!
你自己试试!



from 城市表 a,营业员表 b,
(select 订单号,营业员ID,sum(物品数) as 物品数 from 订单表
group by 订单号,营业员ID) c ,
(select 原订单号,营业员ID,sum(物品数退) as 物品数 from 退单表
group by 原订单号,营业员ID) d
where b.城市ID = a.城市ID
and b.营业员ID = c.营业员ID
and b.营业员ID = c.营业员ID
group by a.城市ID
llbd 2005-05-06
  • 打赏
  • 举报
回复
办不了啊!
ldqh 2005-05-06
  • 打赏
  • 举报
回复
不好使
huobr 2005-05-06
  • 打赏
  • 举报
回复
--没有测试,你自己试一下

select a.城市,count(c.订单号) as 订单数 ,sum(c.物品数) as 物品数,
count(d.原订单号) as 退单数 ,sum(d.物品数) as 退物品数
from 城市表 a,营业员表 b,
(select 订单号,营业员ID,sum(物品数) as 物品数 from 订单表
group by 订单号,营业员ID) c ,
(select 原订单号,营业员ID,sum(物品数退) as 物品数 from 退单表
group by 原订单号,营业员ID) d
where b.城市ID = a.城市ID
and b.营业员ID = c.营业员ID
and b.营业员ID = c.营业员ID
group by a.城市ID

34,576

社区成员

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

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