2014-06-06 117 views
0

以下查詢將在別名'RANKING'上拋出"00904. 00000 - "%s: invalid identifier"錯誤。無法弄清楚爲什麼這不起作用。如果我消除'WHERE'子句,它會產生正確的結果。SQL引發「無效標識符」錯誤

SELECT RELEASE_NAME, 
ROW_NUMBER() OVER(ORDER BY START_DATE DESC) AS RANKING 
FROM(
    SELECT RELEASE_NAME, MIN(START_DATE) AS START_DATE FROM RM_TASK_STATUS_VIEW 
     WHERE RELEASE_NAME LIKE '%AU%' AND START_DATE IS NOT NULL 
     GROUP BY RELEASE_NAME 
     ORDER BY START_DATE 
) 
WHERE RANKING IN (3,4); 
+1

您在'SELECT'中將別名命名爲'WHERE'條件!你需要在'WHERE'條件中再次使用整個表達式,或者再次使用子查詢。由於別名不能在'WHERE'子句中引用,只能在'ORDER BY'子句中引用。 –

+0

實際上,你不能在where子句中使用row_number()。你會得到SQL錯誤:ORA-30483。 –

回答

1

爲查詢生成派生表,並將where子句放在最後。

select * from 
(your query, minus the where clause, goes here) temp 
WHERE RANKING IN (3,4); 
+0

這很好,謝謝!雖然@Stripthesoul的解釋會幫助我記住爲什麼 - 我認爲理解底層問題比修正語法很重要(儘管有時您只需要語法)。 – DanGordon

相關問題