Увеличение значения на основе критериев в одном запросе к базе данных - PullRequest
3 голосов
/ 29 мая 2009

У меня есть таблица, в которой есть столбец с надписью «сортировщик», который позволяет клиенту вручную изменять порядок каждого элемента. В таблице также есть столбец с надписью «CategoryId».

Мне было бы любопытно, если бы я массово импортировал набор данных, в котором я знал все данные, включая CategoryId, как я мог указать значение инкриминирования для 'SortOrder' внутри запроса, чтобы оно перешло от 1 до X каждый уникальный CategoryId.

Спасибо всем.

Ответы [ 3 ]

9 голосов
/ 29 мая 2009

Я не уверен, что понимаю ваш вопрос, но я думаю , что вы спрашиваете, как синтезировать соответствующий SortOrder во время вставки в таблицу. Вы должны использовать ROW_NUMBER () с разделением по CategoryId. Конечно, вам необходимо определить критерии сортировки, которые задают порядок следования от 1 до X:

INSERT INTO myTable (SortOrder, CategoryId, <other columns> ...)
SELECT ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY mySortCriteria)
  , CategoryId
  , <other columns> ...
  FROM SourceTable;
1 голос
/ 29 мая 2009

Похоже, вам нужно использовать функцию row_number в вашем импорте.

INSERT MyTable(SortOrder, ...)
SELECT  SortOrder = row_number() over (partition by CatgoryID order by SomeOtherField), ...
FROM    MyTable
0 голосов
/ 29 мая 2009

Для тех, кто может прийти позже, кто все еще в SQL Server 2000, есть еще один способ выполнить задачу.

Использование какой-либо промежуточной таблицы для исправления данных из массовой вставки. Убедитесь, что в нем есть столбец sortorder, который изначально заполнен 1 и столбцом идентификатора на основе идентификатора.

тогда вы можете обновить это с помощью самостоятельного соединения, что-то вроде

update t
set sortorder = t1.sortorder +1
from test t
join Test t1 on t.id = t1.id+1

Затем поместите данные в таблицу производств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...