2012-06-15 4 views
0

У меня есть запрос:Как заменить NULL, когда COUNT (*) возвращает NULL в DB2

SELECT A.AHSHMT AS SHIPMENT, A.AHVNAM AS VENDOR_NAME, D.UNITS_SHIPPED, D.ADPON AS PO, B.NUMBER_OF_CASES_ON_TRANSIT, C.NUMBER_OF_CASES_RECEIVED FROM AHASNF00 A 
     INNER JOIN (SELECT IDSHMT, COUNT(*) AS NUMBER_OF_CASES_ON_TRANSIT FROM IDCASE00 WHERE IDSTAT = '01' GROUP BY IDSHMT) B 
     ON (A.AHSHMT = B.IDSHMT) 
     LEFT JOIN (SELECT IDSHMT, (COUNT(*) AS NUMBER_OF_CASES_RECEIVED FROM IDCASE00 WHERE IDSTAT = '10' GROUP BY IDSHMT) C 
     ON (A.AHSHMT = C.IDSHMT) 
     INNER JOIN (SELECT ADSHMT, ADPON, SUM(ADUNSH) AS UNITS_SHIPPED FROM ADASNF00 GROUP BY ADSHMT, ADPON) D 
     ON (A.AHSHMT = D.ADSHMT) 
    WHERE A.AHSHMT = '540041134'; 

На первом JOIN заявление у меня есть COUNT (*), на этот счет иногда я буду получать НОЛЬ. Мне нужно, чтобы заменить это «0-ноль», я знаю, кажется, я знаю, как сделать это в SQL

ISNULL(COUNT(*), 0) 

Но это не работает для DB2, как я могу это сделать? Вся ваша помощь действительно ценит это.

+2

'COUNT (*)' возвращает _null_? Если нет соответствующих строк, то он возвращает 0? – Ben

ответ

2

Оберните группироваться вокруг каждый из обнуляемых сумм в списке ЗЕЬЕСТА:

SELECT A.AHSHMT AS SHIPMENT, 
A.AHVNAM AS VENDOR_NAME, 
COALESCE(D.UNITS_SHIPPED, 0) AS UNITS_SHIPPED, 
D.ADPON AS PO, 
COALESCE(B.NUMBER_OF_CASES_ON_TRANSIT, 0) AS NUMBER_OF_CASES_ON_TRANSIT, 
COALESCE(C.NUMBER_OF_CASES_RECEIVED, 0) AS NUMBER_OF_CASES_RECEIVED 
FROM ... 

Внутренние соединяет вас использование выражений B и D означают, что вы будете получать только строки из A, у которых есть один или несколько случаев в пути (выражение B), и иметь один или несколько PO в выражении D. Это так, как вы хотите, чтобы ваш запрос работал?

+0

Благодарим за помощь. – jorame

0

Вместо использования ISNULL(COUNT(*), 0),

попробовать с помощью COALESCE(COUNT(*),0)

0

использование IFNULL(COUNT(*), 0) для DB2

Смежные вопросы