Порядок сортировки SQL на основе значений нескольких столбцов - PullRequest
0 голосов
/ 07 ноября 2011

У нас есть данные, отсортированные по формату ниже. Первый столбец - это наша системная нумерация, второй столбец - это внутренняя системная нумерация, а третий столбец означает, что строки со значением ParentCol фактически ниже совпадающей строки Col1. (Таким образом, пункт 20 состоит из двух дополнительных частей: пункт 30 и пункт 50).

Col1      Col2      ParentCol
10        100       NULL
20        200       NULL
30        201       20
40        300       NULL
50        202       20
10        400       NULL
...

Это лишь небольшой пример - иногда на заказ может быть несколько сотен строк. Приложение плохо обрабатывает эту ситуацию с точки зрения просмотра данных в пользовательском интерфейсе. В идеале, я хотел бы, чтобы содержимое сортировалось следующим образом, с нашим ID-номером (Col1), являющимся основной сортировкой, но с учетом того, что внутренний ID-номер (Col2) должен следовать сразу же, когда значение ParentCol соответствует нашему ID:

Col1      Col2      ParentCol
10        100       NULL
10        400       NULL
20        200       NULL
30        201       20
50        202       20
40        300       NULL

Используя T-SQL, как мне написать запрос, который возвращает данные по мере необходимости? Из-за различных схем нумерации и возможных допустимых повторяющихся значений в нашей схеме нумерации, Col1 (но не внутренний столбец, Col2), я не смог выяснить это.

Спасибо,

Scott

1 Ответ

2 голосов
/ 07 ноября 2011
SELECT *
FROM @t 
ORDER BY CASE WHEN ParentID IS NULL THEN col1 ELSE ParentID END, col2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...