[英]Returning '0' in DB2 if there are no records or count is zero
如果沒有找到行並且計數為 0,我試圖讓這個工作查詢返回 0 作為值。
我已經嘗試使用 IFNULL 為零、合並和 'then 1 else 0' 但沒有任何效果,我只是得到空白行。
在 db2 中查詢:
select
cust,
'PRIOR' as Range,
coalesce(count(case when fordate between '2017-01-01' and '2017-04-13' then 1
else 0 end),0)as count
from table1
where cust = 123
對於調用COUNT
的ELSE
條件,您應該計算NULL
,然后在計數中將其忽略:
SELECT
123 AS cust,
'PRIOR' AS Range,
COUNT(CASE WHEN fordate BETWEEN '2017-01-01' AND '2017-04-13' AND cust = 123
THEN 1 END) AS count
FROM table1;
請注意,我省略了實際的ELSE
條件,因為如果未明確指定,則默認值為NULL
。 另外,我將WHERE
條件移到條件計數中。 這將產生始終返回一行的效果,即使該客戶甚至沒有出現在表中。
選擇cust
look off,因為您正在對整個表進行計數。 我會做SELECT 123 AS cust, ...
,但是如果 DB2 允許這種語法,那就這樣吧。
如果您的表中沒有客戶 123 的行,您將需要“生成”這樣的行。 例如,這樣的事情會起作用
SELECT
c.cust,
'PRIOR' AS Range,
( SELECT COUNT(*) FROM table1 t
WHERE t.cust = c.cust AND fordate BETWEEN '2017-01-01' AND '2017-04-13'
) AS count
FROM TABLE(VALUES( 123 )) AS c(cust)
或者你可以使用 LEFT OUTER JOIN
SELECT
c.cust,
'PRIOR' AS Range,
count(t.cust) AS count
FROM TABLE(VALUES( 123 )) AS c(cust)
LEFT OUTER JOIN table1 t
ON t.cust = c.cust
AND t.fordate BETWEEN '2017-01-01' AND '2017-04-13'
GROUP BY
c.cust
我有一個類似的問題,我想報告滿足條件的行數。 以下為我解決了它;
SELECT Count(*), 'Duplicated Contractor LGA records - post-delete' FROM (SELECT Company, LGA FROM detcontractorLGA GROUP BY Company, LGA HAVING count(*) > 1 ) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.