Question

I am trying to have a "0" show up if there is no result in a DB2 query. Coalesce is not working for me. This is DB2 LUW v8.2. How can I do this?

SELECT 'Stuff',
COALESCE((SUM(OI.QUANTITY)),0)
FROM DB2ADMIN.ORDERS O INNER JOIN DB2ADMIN.ORDERITEMS OI ON O.ORDERS_ID = OI.ORDERS_ID
WHERE DATE(O.TIMEPLACED) = (DATE(CURRENT DATE) - 1 DAYS)
AND OI.CATENTRY_ID = 000001    
GROUP BY DATE(O.TIMEPLACED)
Was it helpful?

Solution

You can use a Common Table Expression to do this.

WITH MYCTE (MYSTUFF, MYSUM) AS (
SELECT 'Stuff',0
FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT 'Stuff', SUM(OI.QUANTITY)
FROM DB2ADMIN.ORDERS O INNER JOIN DB2ADMIN.ORDERITEMS OI ON O.ORDERS_ID = OI.ORDERS_ID
WHERE DATE(O.TIMEPLACED) = (DATE(CURRENT DATE) - 1 DAYS)
AND OI.CATENTRY_ID = 000001    
GROUP BY DATE(O.TIMEPLACED))
SELECT MYSTUFF, SUM(MYSUM)          
FROM MYCTE
GROUP BY MYSTUFF;

OTHER TIPS

Likely the Coalesce is working but the sum is failing because of null, did you try to use COALESCE OR NVL inside the SUM ? i.e.

SELECT 'Stuff',
(SUM(COALESCE(OI.QUANTITY,0)))
FROM DB2ADMIN.ORDERS O INNER JOIN DB2ADMIN.ORDERITEMS OI ON O.ORDERS_ID = OI.ORDERS_ID
WHERE DATE(O.TIMEPLACED) = (DATE(CURRENT DATE) - 1 DAYS)
AND OI.CATENTRY_ID = 000001    
GROUP BY DATE(O.TIMEPLACED)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top