Доступ к Oracle ROWNUMBER с псевдонимом - PullRequest
1 голос
/ 23 июня 2019

У меня есть Oracle Query

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', где оператор в конце, но при этом он показывает ошибку "SLNO неверный идентификатор".

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 июня 2019

Вам нужно обернуть его с помощью встроенного представления / 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?

...