获取多表数据并集

前段时间有需求需要完成一个功能,如下例:

表A:【查询结果集】

HoID  AccID  AmountA

1    2    100

2    5    50

表B:【查询结果集】

HoID  AccID  AmountB

1    2    20 

1    6    20

表C:【查询结果集】

HoID  AccID  AmountC

2    5    30

3    9    50

需要得到的结果是: ABC三表 HoID,AccID取并集,对应的AmountA,AmountB,AmountC有数据则显示,没有则0

HoID  AccID  AmountA  AmountB  AmountC

1    2    100      20      0

1    6    0       20      0

2    5    50      0       30

3    9    0        0      50

 

实现该功能时,考虑到三个表应该都属于主表,所以换了一种方式实现该功能:

With  A as (), B as (), C as ()

select SUM.HoID,SUM.AccID, Isnull(A.AmountA,0) , Isnull(B.AmountB,0), Isnull(C.AmountC,0)

from (

  select distinct HoID,AccID

  from (

    select  HoID,AccID from  A

    union

    select  HoID,AccID from  B

    union

    select  HoID,AccID from  C

  )

) SUM

left join A on A.HoID = SUM.HoID and A.AccID= SUM.AccID

left join B on B.HoID = SUM.HoID and B.AccID= SUM.AccID

left join C on C.HoID = SUM.HoID and C.AccID= SUM.AccID

这样就可以解决之前纠结的问题的,哈哈~

 

转载于:https://www.cnblogs.com/Ying150318/p/5924087.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值