簡體   English   中英

如果沒有記錄或計數為零,則在 DB2 中返回“0”

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

對於調用COUNTELSE條件,您應該計算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.

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