Создайте 2 идентификатора таблицы, второй перезапускается при первом увеличении - PullRequest
0 голосов
/ 07 октября 2019

У меня есть следующая таблица:

CREATE TABLE [dbo].[CASES]
(
    [CASE_ID] INT NOT NULL,
    [CASE_SECTION] INT NOT NULL,
    [CASE_DATA] NVARCHAR(MAX) NOT NULL,
)

Я хочу увеличить CASE_SECTION в зависимости от того, изменился ли CASE_ID.

Пример:

CASE_ID  CASE_SECTION  CASE_DATA
---------------------------------------------
1        1             'FROG ATE THE FLY'
1        2             'FROG SAT ON LOG'
2        1             'CHEETAH CHEATAXED'
3        1             'BLUE CHEESE STINKS'

В принципе, я хочу сделать что-то похожее на использование ROW_NUMBER() OVER(PARTITION BY CASE_ID), когда CASE_DATA вставлен в таблицу.

Есть ли способ настроить таблицу так, чтобы CASE_SECTION увеличивался, как этопо умолчанию при вставке данных?

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Если вы можете добавить столбец IDENTITY или InsertedDateTime в таблицу, вы можете использовать его, чтобы сделать Case_Section вычисляемый столбец, использующий row_number (), разделенный на case_id.

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

Если вашвычисление делает row_number() over(partition by case_id order by [ColumnThatIncreasesWithEachInsert]), тогда значения будут стабильными во времени.

0 голосов
/ 07 октября 2019

Вы можете использовать число:

Select row_number() over(partition by case_id order by case_data) as case_section, * from yourtable
...