Sql 使用别名访问Oracle ROWNUMBER
我有一个Oracle查询Sql 使用别名访问Oracle ROWNUMBER,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我有一个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 NOCY
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
此查询在结尾处没有“where SLNO介于10和25之间”where语句的情况下运行良好,但在此情况下显示“SLNO invalid identifier”错误
请提供帮助。您需要使用内联视图/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
inWHERE
子句中直接定义的别名,因为它不可见
此外,您也无法将
行编号
移动到中
的位置您需要使用内联视图/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
inWHERE
子句中直接定义的别名,因为它不可见
此外,您也无法将
行号
移动到的WHERE
位置感谢您的回复,我之前也尝试过这个方法,但没有WHERE条件,它显示错误“列定义模糊”和行23@Chanky不要使用别名。*。明确定义列库,选择所需列,现在正在执行感谢您的响应,我以前也尝试过使用额外的cte,但没有where条件,它显示错误“列定义模糊”和行23@Chanky不要使用别名。*。明确定义列库、选定的必需列,它现在正在执行