簡體   English   中英

SQL DB2聯合跳過NULL / 0行

[英]SQL DB2 Union skip NULL/0 rows

有沒有一種簡單的方法可以跳過聯合中的NULL行? 我在使用DB2。

例:

SELECT 'FIRST', sum(value) FROM  SYSIBM.SYSDUMMY1
UNION
SELECT 'SECOND', sum(value) FROM  SYSIBM.SYSDUMMY1
UNION
SELECT 'THIRD', sum(value) FROM  SYSIBM.SYSDUMMY1

結果:

1---------|2-----
    FIRST   1
    SECOND  NULL/0
    THIRD   3

因此,如果其中一個並集具有0或NULL,則應將其跳過:

估計示例結果:

1---------|2-----
    FIRST   1
    THIRD   3

使用子查詢。 我也建議union all

SELECT col, val
FROM (SELECT 'FIRST' as col, sum(value) as val FROM SYSIBM.SYSDUMMY1
      UNION ALL
      SELECT 'SECOND' as col, sum(value) as val FROM SYSIBM.SYSDUMMY1
      UNION ALL
      SELECT 'THIRD' as col, sum(value) as val FROM SYSIBM.SYSDUMMY1
     ) t
WHERE val IS NOT NULL AND val > 0;

筆記:

  • UNION會導致刪除重復項的開銷。 使用UNION ALL避免該開銷。
  • 比較val IS NOT NULL是多余的。 但是它明確表達了您想要的條件。

是的,您可以使用HAVING過濾器檢查IS NOT NULL來做到這一點。

SELECT 'FIRST', sum(value)
    FROM  SYSIBM.SYSDUMMY1 GROUP BY 'FIRST' HAVING sum(value) IS NOT NULL

UNION

SELECT 'SECOND', sum(value)
    FROM  SYSIBM.SYSDUMMY1 GROUP BY 'SECOND' HAVING sum(value) IS NOT NULL

UNION

SELECT 'THIRD', sum(value)
    FROM  SYSIBM.SYSDUMMY1 GROUP BY 'THIRD' HAVING sum(value) IS NOT NULL

如果sum(value)的任何一個返回NULL ,則由於GROUP BY子句,關聯的SELECT語句將返回零行,從而導致相應的行省略。

如果你想省略基礎上無論是行NULL 一個零和,添加AND一起像這樣的:

SELECT 'FIRST', sum(value) FROM SYSIBM.SYSDUMMY1 GROUP BY 'FIRST' HAVING sum(value) IS NOT NULL AND NOT sum(value) = 0
UNION
SELECT 'SECOND', sum(value) FROM  SYSIBM.SYSDUMMY1 GROUP BY 'SECOND' HAVING sum(value) IS NOT NULL AND NOT sum(value) = 0
UNION
SELECT 'THIRD', sum(value) FROM  SYSIBM.SYSDUMMY1 GROUP BY 'THIRD' HAVING sum(value) IS NOT NULL AND NOT sum(value) = 0

另外,您可以通過將UNION更改為UNION ALL來提高查詢的效率,因為最終結果中永遠不會有重復的行。 UNION進行重復檢查,在這種情況下將永遠不會觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM