>
> А причем тут вообще 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?

Ответить