请教一个主表,两个或多个子表的统计语句!!!

imtank 2003-03-28 01:47:45
select A.id,count(AA.aaid),count(AB.abid)
from A left join AA on AA.id = A.id
left join AB on AB.id = A.id
group by A.id

A为主表,AA、AB为子表,有字段ID相连,AA和AB没有任何关系,当AA中有3条记录和AB中5条记录对应A中的一条记录时,统计出的AA的count也是5条,而不是3条,用外连接或内连接都不行,请大蛱们指点,谢谢!
...全文
51 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
imtank 2003-03-29
  • 打赏
  • 举报
回复
go on
imtank 2003-03-29
  • 打赏
  • 举报
回复
还没搞定,进一步讲,就是我要按CostType分组,但不出现A.id,且能使用AB中的字段做为检索条件,该如何做啊,请各位帮忙,谢谢!
imtank 2003-03-28
  • 打赏
  • 举报
回复
那再在上面的查询中加一项就是从AB中检索sum(AB.cost) group by AB.CostType,且CostType允许为空呢,该如何解决?大概的意思就是

select A.id,count(AA.aaid),count(AB.abid),sum(AB.cost)
from A left join AA on AA.id = A.id
left join AB on AB.id = A.id
group by A.id,AB.CostType
//注:这句肯定是错的,只是让大家理解一下我的想法:)

谢谢!
CrazyFor 2003-03-28
  • 打赏
  • 举报
回复
TRY:

select A.id,aaa.aacount,bbb.abcount
from a left join
(select aaid,count(*) as aacount from aa group by aaid)aaa
on a.id=aaa.aaid left join
(select abid,count(*) as abcount from ab group by abid)bbb
on a.id=bbb.abid
imtank 2003-03-28
  • 打赏
  • 举报
回复
按照zqllyh(学习Stupid As Pig中...)大蛱的方法已作出来啦:)不过我的查询比较复杂,有近20个参数,且要根据参数判断进行左连接还是右连接,有三个表的不同字段是分组条件,查询起来感觉有点慢了,另一种方法是先把AA中的统计出来生成一个临时表,里边有AB表统计的空字段,然后定义游标统计AB中的数据更新这个临时表,最后从临时表中检索数据,大家看一下哪种方法效率高一点,或算法好一点,谢谢!
happydreamer 2003-03-28
  • 打赏
  • 举报
回复

left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
所以统计出来是5条记录


用子查询处理就可以了
zqllyh 2003-03-28
  • 打赏
  • 举报
回复
select A.id,(select count(AA.aaid) from aa where AA.id = A.id),(select count(ab.aaid) from ab where ab.id = A.id)
from A group by A.id

34,593

社区成员

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

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