2014-01-21 102 views
1

我想知道是否有人能够帮助我处理我正在处理的DB2查询?从查询返回空行

我基本上试图在Control Number上的两个表DB2CustNOTIFICATION_REQUE之间做左外连接。

我想返回DB2Cust中的所有行,但是,在NOTIFICATION_REQUE我想选择最大Notice_DT并仅返回该记录。

下面的查询是我到目前为止。

它很接近,但它不会返回DB2Cust中不存在的控制号码NOTIFICATION_REQUE

SELECT 
    C.CONTROL_NO, 
    NR.CONTROL_NBR, 
    COALESCE(C.LNAME,'') AS LNAME, 
    COALESCE(C.FNAME,'') AS FNAME, 
    COALESCE(CAST(NR.NOTICE_DT AS VARCHAR(10)), '') AS NOTICE_DT 
FROM WITC00DS.DB2CUST C 
LEFT OUTER JOIN WITC00DS.NOTIFICATION_REQUE NR 
      ON C.CONTROL_NO = NR.CONTROL_NBR 
     AND C.AGENT_CODE = 'HR' AND C.STW_DATE BETWEEN '01/01/2000' AND '01/17/2014' 
WHERE NR.NOTICE_DT = (SELECT MAX(NOTICE_DT) 
         FROM WITC00DS.NOTIFICATION_REQUE ZZ 
         WHERE ZZ.CONTROL_NBR = C.CONTROL_NO) 

回答

0

这里有两种选择。您可以将子查询移到on条款:

SELECT C.CONTROL_NO, NR.CONTROL_NBR, COALESCE(C.LNAME,'') AS LNAME, COALESCE(C.FNAME,'') AS FNAME, 
     COALESCE(CAST(NR.NOTICE_DT AS VARCHAR(10)), '') AS NOTICE_DT 
FROM WITC00DS.DB2CUST C LEFT OUTER JOIN 
    WITC00DS.NOTIFICATION_REQUE NR 
    ON C.CONTROL_NO = NR.CONTROL_NBR AND 
     C.AGENT_CODE = 'HR' AND 
     C.STW_DATE BETWEEN '01/01/2000' AND '01/17/2014' AND 
     NR.NOTICE_DT = (SELECT MAX(NOTICE_DT) 
         FROM WITC00DS.NOTIFICATION_REQUE ZZ 
         WHERE ZZ.CONTROL_NBR = C.CONTROL_NO 
         ) 

或者你可以明确的'WHERE子句中检查NULL

SELECT C.CONTROL_NO, NR.CONTROL_NBR, COALESCE(C.LNAME,'') AS LNAME, COALESCE(C.FNAME,'') AS FNAME, 
     COALESCE(CAST(NR.NOTICE_DT AS VARCHAR(10)), '') AS NOTICE_DT 
FROM WITC00DS.DB2CUST C LEFT OUTER JOIN 
    WITC00DS.NOTIFICATION_REQUE NR 
    ON C.CONTROL_NO = NR.CONTROL_NBR AND 
     C.AGENT_CODE = 'HR' AND 
     C.STW_DATE BETWEEN '01/01/2000' AND '01/17/2014' AND 
WHERE NR.NOTICE_DT is null or 
     NR.NOTICE_DT = (SELECT MAX(NOTICE_DT) 
         FROM WITC00DS.NOTIFICATION_REQUE ZZ 
         WHERE ZZ.CONTROL_NBR = C.CONTROL_NO 
        ); 
+0

戈登您好,感谢您的帮助......然而,当我尝试上面的第一个解决方案我得到“与JOIN操作符关联的ON子句或MERGE语句无效SQLSTATE = 42972”。 – user2997454

+0

@ user2997454。 。 。看起来,DB2不支持该语法(尽管其他数据库可以)。无论如何,我更喜欢第二个版本。 –