MSSQL Сортирует по 2 столбцам, затем обновляет столбец сортировки

#sql-server #sorting

Вопрос:

У меня есть таблица элементов, элементы могут быть связаны либо с датой, либо с категорией, либо с тем и другим.

Теперь мне нужно обновить столбец сортировки, чтобы я мог упорядочивать элементы на экране, так что что-то вроде этого;

Предмет Категория Дата
Пункт 1 Cat1 02/08/21
Пункт 2 Cat2 03/08/21
Пункт 3 Cat1 03/08/21
Пункт 4 Cat1 03/08/21
Пункт 5 Cat2 02/08/21
Пункт 6 Cat2 03/08/21

но когда я добавил столбец сортировки, мне нужно, чтобы он выглядел так;

Предмет Категория Дата Заказ
Пункт 1 Cat1 02/08/21 1
Пункт 5 Cat2 02/08/21 1
Пункт 3 Cat1 03/08/21 1
Пункт 4 Cat1 03/08/21 2
Пункт 6 Cat2 03/08/21 1
Пункт 2 Cat2 03/08/21 2

Таким образом, он делает что-то вроде «выберите * из заказа товаров по категории asc, дате asc, затем он дает каждой «группе» количество, начинающееся с 1 и увеличивающееся для каждого члена этой группы, а затем возвращается к 1 для следующей группы. таким образом, товары с той же категорией и датой получают заказ, затем следующему набору товаров с той же категорией, но с другой датой снова выдается заказ, начинающийся с 1, и так далее.

Надеюсь, я все правильно объяснил …

Ответ №1:

Ты хочешь ROW_NUMBER :

 SELECT *, ROW_NUMBER() OVER (PARTITION BY Category, Date ORDER BY Item) [Order]
FROM yourTable
ORDER BY Date, Category;
 

Комментарии:

1. Это блестяще, как раз то, что мне было нужно. Я заглянул в row_number, но, должно быть, что-то пропустил, так как он упорядочивал таблицу, показывая номера строк, но начинался с 1 и продолжал увеличиваться до конца таблицы