2016-06-07 49 views
0

我想在蟾蜍數據點中建立一個查詢。我有一個子查詢,它有一個行號來標識我感興趣的記錄。只有在行號爲1時,此子查詢才需要留在主表中。以下是我想要查看的查詢:如何在蟾蜍數據點查詢生成器中保持連接狀態?

SELECT distinct E.EMPLID, E.ACAD_CAREER 
FROM PS_STDNT_ENRL E 
LEFT JOIN (
    SELECT ACAD_CAREER, ROW_NUMBER() OVER (PARTITION BY ACAD_CAREER ORDER BY EFFDT DESC) as RN 
    FROM PS_ACAD_CAR_TBL 
) T on T.ACAD_CAREER = E.ACAD_CAREER and RN = 1 

當我嘗試複製它時,行號條件放置在全局WHERE子句中。這不是預期的功能,因爲它會刪除子查詢中沒有匹配的記錄,從而使其成爲內部聯接。

enter image description here

enter image description here

這裏是它生成查詢:

SELECT DISTINCT E.EMPLID, E.ACAD_CAREER, T.RN 
    FROM SYSADM.PS_STDNT_ENRL E 
     LEFT OUTER JOIN 
     (SELECT PS_ACAD_CAR_TBL.ACAD_CAREER, 
       ROW_NUMBER() 
        OVER (PARTITION BY ACAD_CAREER ORDER BY EFFDT DESC) 
        AS RN 
      FROM SYSADM.PS_ACAD_CAR_TBL PS_ACAD_CAR_TBL) T 
      ON (E.ACAD_CAREER = T.ACAD_CAREER) 
WHERE (T.RN = 1) 

有沒有辦法讓查詢生成器放置該行號條件對左連接,而不是全球WHERE子句?

回答

0

我找到了一種方法來使這個工作。

  1. 計算字段添加到主表的1

enter image description here

  • 加入行號這一新計算字段。
  • enter image description here

    現在查詢在連接條件的過濾器,而不是在WHERE子句,以便它任命爲意。下面是它的查詢:

    SELECT DISTINCT E.EMPLID, E.ACAD_CAREER, T.RN 
        FROM SYSADM.PS_STDNT_ENRL E 
         LEFT OUTER JOIN 
         (SELECT PS_ACAD_CAR_TBL.ACAD_CAREER, 
           ROW_NUMBER() 
            OVER (PARTITION BY ACAD_CAREER ORDER BY EFFDT DESC) 
            AS RN 
          FROM SYSADM.PS_ACAD_CAR_TBL PS_ACAD_CAR_TBL) T 
          ON (E.ACAD_CAREER = T.ACAD_CAREER) AND (1 = T.RN)