Обновление записей SQL с увеличивающимся значением, начинающимся с 1 каждый раз - PullRequest
2 голосов
/ 09 сентября 2010

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

Итак, если у меня есть

Batch    Name    IncementingValue
1        Joe     1
1        Pete    2
1        Andy    3
2        Sue     1
2        Mike    2
2        Steve   3

и затем я добавляю две записи (используя одну инструкцию вставки):

3        Dave
3        Paul

Как запустить оператор обновления для этой таблицы, чтобы Дэйв установил 1, а Пол - 2. Я не хочу использовать курсор.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Функция ранжирования ROW_NUMBER должна делать то, что вам нужно.Вы не упомянули никаких конкретных правил о том, как должен быть назначен порядковый номер, поэтому я сделал это здесь, используя имя:

INSERT targetTable(Batch,Name,IncementingValue)
SELECT BatchId,
       Name,
       ROW_NUMBER() OVER (ORDER BY Name)
FROM sourceTable
0 голосов
/ 26 июня 2015

Мне нужно было сделать что-то похожее с датами и отформатированными числами.

Надеюсь, кто-то найдет этот пример полезным.

    update TEST_TABLE 
    set ref = reference
          from (
                      select 
                          *, 
                          (CONVERT(VARCHAR(10),GETDATE(),12) + RIGHT('0000' + CAST(ROW_NUMBER() OVER (ORDER BY id) AS VARCHAR(4)), 4)) as reference 
                      from TEST_TABLE
                      WHERE 
                    test_table.id > 4
                        and
                    test_table.id < 8 
                ) TEST_TABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...