>
> А причем тут вообще CTE? ORDER BY в подчастях UNION никогда не допускалось.
Вот такой вопрос выполняется, хотя содержит order by
WITH RECURSIVE
B AS
(
SELECT
B_H.DB,
B_H.RN,
B_H.HDB,
B_H.HRN,
B_H.CODE,
B_H.NAME,
0 AS LVL
FROM BE B_H
WHERE B_H.HDB IS NULL AND B_H.HRN IS NULL
UNION ALL
SELECT
B_L.DB,
B_L.RN,
B_L.HDB,
B_L.HRN,
B_L.CODE,
B_L.NAME,
B.LVL + 1 AS LVL
FROM BE B_L
JOIN B ON B_L.HDB = B.DB AND B_L.HRN = B.RN
ORDER BY B_L.NAME
)
SELECT
B.DB,
B.RN,
B.HDB,
B.HRN,
B.CODE,
IIF(B.LVL > 0, LPAD(B.NAME, CHAR_LENGTH(B.NAME) + 3 * B.LVL, ' '),
B.NAME) AS NAME
FROM
B
Далее, мне нужно было, чтобы набор данных, с которого разворачивается
рекурсия, был упорядоченным по NAME. Решение через derived table мне
не нравится.
IMHO, т.к. union all здесь не является оператором объединения наборов
данных, а указывает способ (направление) рекурсивного прохода, то и
использование order by в формировании стартового набора рекурсии
является приемлемым. Отсюда вопрос - приемлимо ли это или нет, и если
да - когда можно надеяться на реализацию и в какой форме?
PS: Не подскажите, где можно взять стандарт SQL-99?