【问题标题】:SQL - Row sum with condition from 2 tablesSQL - 来自 2 个表的条件行总和
【发布时间】:2017-08-27 00:41:29
【问题描述】:

我有 2 个表,想从 2 个带条件的表中获取行总和。 这是我的表格:

tabale1, tabale2

我想要 2 个表的行总和,例如:

if sk not null sum sk but if it is null sk = ss 

例如sh2的总和为:19 + 5 + 11 + 5 = 40

我真的需要那个,请帮忙!

表1:

表2:

【问题讨论】:

  • 请显示更多细节
  • @vol7ron 现在修复
  • @AbdullahDibas 现在修复了,抱歉我第一次在这里问任何问题
  • 你期望结果是什么?
  • @vol7ron 好的,我希望结果是这样的,例如 sh2:19 + 5 + 11 + 5 = 40 为每个名称计算它们都在一个表中

标签: sql sql-server select sum case


【解决方案1】:

下一个 sql 将返回表的总和,按名称分组:

select name, sum(total) total from 
(select name, sum(coalesce(sk,ss)) total
 from table1
 group by name
 union all
 select name, sum(coalesce(sk,ss)) total
 from table2
 group by name
) t
group by name

子查询中的“group by”子句非常重要,因为无论表返回多少行,它们都会减少查询中“group by”的行数,优化时间并使用更少的内存。

【讨论】:

  • 你最好改用UNION ALL。 (如果 table1 和 table2 的名称总和相同。)
  • 是的,因为“UNION”中的内在不同,谢谢。固定。
  • @rafaedez hi 和 tnx 还有一件事,如何用 select case 做到这一点?
  • 派生表中的那些 group by 子句对于某些产品可能很重要,但对于其他产品则完全多余。而且OP在这里没有指定dbms。
【解决方案2】:

如果 sk 不为空,请使用 coalesce 选择 sk。否则(如果 sk 为空),将使用 ss。

UNION ALL 两张表,GROUP BY 其结果:

select name, sum(skss)
from 
(
    select name, coalesce(sk, ss) skss
    from table1
    union all
    select name, coalesce(sk, ss) skss
    from table2
) dt
group by name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多