#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 и продолжал увеличиваться до конца таблицы