0

質問があります:

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(*)がありますが、このカウントではNULLになることがあります。これを「0-ゼロ」に置き換える必要があります。SQLでそれを行う方法を知っていると思います。

ISNULL(COUNT(*), 0)

しかし、これはDB2では機能しません。どうすればこれを実現できますか?あなたのすべての助けは本当にそれを感謝しています。

4

3 に答える 3

2

SELECT リスト内の null 許容合計のそれぞれを COALESCE で囲みます。

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 に使用している内部結合は、転送中のケース (式 B) が 1 つ以上あり、式 D に 1 つ以上の PO がある行のみを A から受け取ることを意味します。動作するクエリ?

于 2012-06-15T23:35:15.713 に答える
0

IFNULL(COUNT(*), 0)DB2での使用

于 2013-03-15T12:56:45.103 に答える
0

を使用する代わりにISNULL(COUNT(*), 0)

使ってみてCOALESCE(COUNT(*),0)

于 2012-06-15T21:27:26.787 に答える