来自2个相似表的2个其他SUM的总和

时间:2019-07-15 10:53:25

标签: sql sql-server-2008-r2

我有表'A',表'B'和表'C'

A:

|Name|ID|
|AAA |Z5|
|AAB |Z5|
|BBB |F2|
...

B:

|ID|QTY|PRICE|
|Z5|5  |5.123|
|Z5|3  |2.222|
|Q0|9  |3.111|

C:

|ID|QTY|PRICE|
|Z5|8  |4.3  |
|F2|3  |0.55 |

我需要的结果:

A:

|Name|ID|SUM   |
|AAA |Z5|64.459|
|AAB |Z5|64.459|
|BBB |F2|1.65  |

它汇总了在其他2个表中找到的所有内容

我尝试了一些B和A内部联接的情况。 尝试了一些联盟案例。 使用内部连接时,我最终得到的结果太少(B和C中的某些情况被切除(或A,不是100%确定)) 有了联盟,我得到了很多重复

2 个答案:

答案 0 :(得分:0)

我认为您想加入union all,然后加入:

select a.name, a.id, sum(total)
from a left join
     ((select b.id, sum(b.qty * b.price) as total
       from b
       group by b.id
      ) union all
      (select c.id, sum(c.qty * c.price) as total
       from c
       group by c.id
      )
     ) bc
group by a.name, a.id;

答案 1 :(得分:0)

select a.name, a.id, sum(bc.total) as total
from a left join
     (select b.id, b.qty * b.price as total
        from b
      union all
      select c.id, c.qty * c.price as total
        from c
      ) bc on a.id = bc.id
group by a.name, a.id;

bc 级别上也可以进行聚合或不进行聚合是有争议的,但我不希望这样做,以保持代码更简洁。