[英]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.