【问题标题】:Can anyone help me to get the query to retrieve data like below [closed]谁能帮我获取查询以检索如下数据[关闭]
【发布时间】:2016-10-31 18:18:18
【问题描述】:
    A                      B                   c

id   sal                 id  sal          id     sal
--------                 --------         -----------
1    100                  1  100           1     100
2    200                  2  200           2     200
3    300                  3  300           
4    400

输出应该是:

id   sal
----------
1    300
2    600
3    600
4    400

【问题讨论】:

  • 如果你能经常展示你所尝试的东西,你可以比你意识到的更接近,它可以帮助其他人给你更好的答案。

标签: sql sql-server


【解决方案1】:

这是您正在寻找的确切结果的查询。

select 
    A.id, 
    sum(A.sal + ISNULL(B.sal, 0) + ISNULL(C.sal, 0) ) sal 
from TableA A
    left join TableB B 
        on A.id = B.id
    left join TableC C 
        on A.id = C.id
group by A.id

另外,如果 TableC 或 TableB 包含不在其他表中的记录,您可以使用以下代码:

select 
    IsNULL(A.id, IsNULL(B.id, C.id)) as id, 
    sum(ISNULL(A.sal, 0) + ISNULL(B.sal, 0) + ISNULL(C.sal, 0) ) sal 
from TableA A
    full outer join TableB B 
        on A.id = B.id
    full outer join TableC C 
        on A.id = C.id
group by IsNULL(A.id,IsNULL(B.id,C.id))

【讨论】:

    【解决方案2】:
    select 
        x.id as id, 
        sum(x.sal) as sal  
    from (
        select id as id, sal as sal from A
        union all
        select id as id, sal as sal from B
        union all
        select id as id, sal as sal from C
        ) as x
    group by x.id
    

    【讨论】:

    • 感谢 michael。但我需要加入 null 条件。
    • 如果结果中只能找到来自 A 的记录。
    【解决方案3】:
    SELECT A.ID,
           SUM(ISNULL(A.SAL,0)+ISNULL(B.SAL,0)+ISNULL(C.SAL,0)) TOTAL 
    FROM A left JOIN B ON A.ID=B.ID  
           left JOIN C ON B.ID=C.ID
    GROUP BY A.ID
    

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 2013-07-11
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多