簡體   English   中英

使用別名訪問Oracle ROWNUMBER

[英]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.

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