У меня есть таблица T (структура ниже), которая изначально содержит все значения NULL в целочисленном столбце order
:
col1 varchar(30), col2 varchar(30), order int NULL
У меня также есть способ упорядочить столбцы «colN», например.
SELECT * FROM T ORDER BY some_expression_involving_col1_and_col2
Как лучше всего присвоить - В 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")