У меня есть таблица T (структура ниже), которая изначально содержит все NULL-значения в целом столбце order
:
col1 varchar(30),
col2 varchar(30),
order int NULL
У меня также есть способ заказать столбцы "colN", например,
SELECT * FROM T ORDER BY some_expression_involving_col1_and_col2
Каков наилучший способ присвоения - IN SQL - числовых значений порядка 1-N для таблицы порядка, чтобы значения порядка соответствовали порядку строк, возвращаемых приведенным выше ORDER BY ?
Другими словами, я хотел бы один запрос (синтаксис Sybase SQL, поэтому не указывается число строк в Oracle), который присваивает значения order
, чтобы SELECT * FROM T ORDER BY order
возвращал 100% порядок строк, аналогичный приведенному выше запросу.
Запрос НЕ обязательно должен обновлять таблицу T на месте, я согласен с созданием копии таблицы T2, если это упростит запрос.
ПРИМЕЧАНИЕ 1. Решением должен быть реальный запрос или набор запросов, , а не с использованием цикла или курсора.
ПРИМЕЧАНИЕ 2. Предположим, что данные могут быть однозначно упорядочены в соответствии с приведенным выше порядком - не нужно беспокоиться о ситуации, когда 2 строкам можно назначить один и тот же порядок случайным образом.
ПРИМЕЧАНИЕ 3. Я бы предпочел универсальное решение, но если вы хотите конкретный пример выражения порядка, скажем:
SELECT * FROM T
ORDER BY CASE WHEN col1="" THEN "AAAAAA" ELSE col1 END, ISNULL(col2, "ZZZ")