在WHERE 子句中使用ROW_NUMBER() 函數時遇到錯誤
出現了有關ROWHERE 中ROW_NUMBER() 函數使用的問題條款。一位使用者在嘗試以下查詢時遇到錯誤,指出「視窗函數只能出現在SELECT 或ORDER BY 子句中」:
SELECT employee_id FROM v_employee WHERE ROW_NUMBER() OVER (ORDER BY employee_id) > 0 ORDER BY employee_id
解決方案:使用視窗函數的包裝器CTE
要解決此錯誤,一種常見的技術涉及創建封裝視窗函數計算的公共表表達式(CTE)。透過將原始查詢包裝在 CTE 中,後續查詢可以存取視窗函數的結果並在 WHERE 子句中使用它們。
實現此解決方案的修改後的查詢將如下所示:
WITH MyCte AS ( select employee_id, RowNum = ROW_NUMBER() OVER (ORDER BY employee_id) from v_employee ORDER BY employee_id ) SELECT employee_id FROM MyCte WHERE RowNum > 0
透過使用此方法,視窗函數的輸出可在WHERE 子句中使用,從而允許用戶根據所需的條件成功過濾結果。
以上是為什麼不能在 WHERE 子句中使用 ROW_NUMBER()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!