簡體   English   中英

如何在 SQL 中加入帶有 row_number() 函數的語句?

[英]How to join to a statement with a row_number() function in SQL?

我是一個帶有 row_number() 函數的 SQL,我想加入其他表以獲取以下字段。 我將如何做到這一點?

所需字段:

EMPLOYEE.EMPLID 
  EMPLOYEE.JOBTITLE
  NAME.FIRST_NAME
  NAME.LAST_NAME
  LOCATION.ADDRESS
  PROFESSIONAL_NAME.PROF_NAME 

開始 SQL:

SELECT COUNT(*) 
FROM 
    (
        SELECT EMPLOYEE.*, ROW_NUMBER() OVER (PARTITION BY EMPLID ORDER BY 
        PRIM_ROLE_IND DESC, EMPL_RCD ASC) as RN
        FROM EMPLOYEE
        WHERE JOB_INDICATOR = 'P'
    ) dt
WHERE RN = 1

當我嘗試在末尾添加左連接時,我收到一條錯誤消息,顯示“EMPLOYEE”。“EMLID”無效標識符。

我正在嘗試什么:

SELECT 
  EMPLOYEE.EMPLID, 
  EMPLOYEE.JOBTITLE,
  NAME.FIRST_NAME, 
  NAME.LAST_NAME, 
  LOCATION.ADDRESS,
  PROFESSIONAL_NAME.PROF_NAME 
FROM 
    (
        SELECT EMPLOYEE.*, ROW_NUMBER() OVER (PARTITION BY EMPLID ORDER BY 
        PRIM_ROLE_IND DESC, EMPL_RCD ASC) as RN
        FROM EMPLOYEE
        WHERE JOB_INDICATOR = 'P'
    ) 
    
    LEFT JOIN NAME ON EMPLOYEE.EMPLID = NAME.EMPLID 
WHERE 
  RN = 1
  AND
  NAME.EFFDT = (
    SELECT 
      MAX (NAME2.EFFDT) 
    FROM 
      NAME NAME2 
    WHERE 
      NAME2.EMPLID = NAME.EMPLID 
      AND NAME.NAME_TYPE = 'PRI'
  )  
  AND EMPLOYEE.JOB_INDICATOR = 'P'

你只需要給你的表起別名

...
(
    SELECT EMPLOYEE.*, ROW_NUMBER() OVER (PARTITION BY EMPLID ORDER BY 
    PRIM_ROLE_IND DESC, EMPL_RCD ASC) as RN
    FROM EMPLOYEE
    WHERE JOB_INDICATOR = 'P'
) temp_employee --add this
LEFT JOIN NAME ON temp_employee.EMPLID = NAME.EMPLID 
...

當您在內部選擇中使用 row_number() 創建新表時,您實際上是在創建一個新表。 您需要給該表起alias或命名,然后引用該別名。 在上面,您的from是內部選擇,而不是 EMPLOYEE 表。 請參閱下面的簡化示例。

select newtable.field from (select field from mytable) newtable 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM