【问题标题】:Adding Case in two sub queries returning null on subtract在两个子查询中添加大小写,减去时返回 null
【发布时间】:2015-05-27 21:42:28
【问题描述】:

我有两张表,都有qty 列,我想从donated_items 中减去issued_donated_items。它工作正常,直到issued_donated_items 中没有记录然后我的查询返回 null

SELECT 
(
(SELECT Sum(quantity) AS tQty  FROM donated_items WHERE item_id=4)

-

(SELECT Sum(quantity_issued) AS issueQty  FROM issued_donated_items WHERE item_id=4)

)AS total

【问题讨论】:

    标签: sql .net database


    【解决方案1】:

    我建议将子查询移至from 子句并使用coalesce()

    SELECT (COALESCE(di.QTY, 0) - COALESCE(idi.issueQTY, 0)
           ) AS total
    FROM (SELECT Sum(quantity) AS tQty FROM donated_items WHERE item_id = 4) di CROSS JOIN
         (SELECT Sum(quantity_issued) AS issueQty FROM issued_donated_items WHERE item_id = 4) idi;
    

    例如,如果您想查看两个数字及其差异,则可以轻松地重复使用这些值。

    【讨论】:

      【解决方案2】:

      像这样使用 isnull()

      SELECT 
      (
      (SELECT Sum(isnull(quantity,0)) AS tQty  FROM donated_items WHERE item_id=4)
      
      -
      
      (SELECT Sum(isnull(quantity_issued,0)) AS issueQty  FROM issued_donated_items WHERE item_id=4)
      
      )AS total
      

      对于 ANSI 标准 SQL,使用 coalesce() 而不是 isnull()

      【讨论】:

      • 我能理解答案,但不能理解赞成票,因为这不能解决 OP 的问题。
      • @GordonLinoff:OP 并没有准确地解释问题。我猜对了,你猜对了,也许我们中的一个人是对的。
      • OP 确实解释了相关部分。当issued_donated_items 没有匹配的行时,您的代码仍将返回NULL
      • @GordonLinoff 你是对的,我仍然收到NULL
      • @PieterGeerkens 。 . .如果您还没有弄清楚,您的查询将处理存储在表中的NULL 值。它不处理子查询不返回行的情况。
      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 2019-11-07
      • 2020-02-14
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多