[英]Accesing Oracle ROWNUMBER with alias name
我有一個Oracle查詢
WITH cte AS (
SELECT
category_id,
category_name,
parent_category_id,
ltrim(sys_connect_by_path(category_name, '/'), '/') "ParentNames"
FROM
bg_categories
START WITH
parent_category_id = - 1
CONNECT BY NOCYCLE
PRIOR category_id = parent_category_id
)
SELECT
ROW_NUMBER() OVER (
ORDER BY
bco.ID desc
) AS SLNO,
bco.*,
cte.*,
(
SELECT
COUNT(*)
FROM
object_document obj
WHERE
obj.object_id = bco.id
AND object_type_id = 85
) AS customobjects_doc_count
FROM
bg_custom_objects bco
JOIN cte ON ( cte.category_id = bco.category_id ) where SLNO between 10 and 25
此查詢在末尾顯示“'SLNO在10到25之間”的where語句時可以很好地工作,但是顯示“ SLNO無效標識符”錯誤。
請幫助。
您需要使用內聯視圖/ cte包裝它:
WITH cte AS (
SELECT
category_id,
category_name,
parent_category_id,
ltrim(sys_connect_by_path(category_name, '/'), '/') "ParentNames"
FROM bg_categories
START WITH parent_category_id = - 1
CONNECT BY NOCYCLE
PRIOR category_id = parent_category_id
), cte2 AS (
SELECT
ROW_NUMBER() OVER (ORDER BY bco.ID desc) AS SLNO
--,bco.* -- columns should be listed explicitly
--,cte.* -- columns should be listed explicitly
,(
SELECT COUNT(*)
FROM object_document obj
WHERE obj.object_id = bco.id
AND object_type_id = 85
) AS customobjects_doc_count
FROM bg_custom_objects bco
JOIN cte ON ( cte.category_id = bco.category_id )
)
SELECT *
FROM cte2
WHERE SLNO BETWEEN 10 AND 25;
如果兩者都處於同一級別,則不能使用直接在SELECT
中的WHERE
子句中定義的別名,因為它們不可見無法引用計數發生次數的列
另外,您也無法將ROW_NUMBER
移到WHERE
, 為什么where子句中沒有窗口函數?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.