我有下表:
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
以这种方式递增?
您可以使用行号:
Select row_number() over(partition by case_id order by case_data) as case_section, * from yourtable
如果可以将IDENTITY或InsertedDateTime列添加到表中,则可以使用它来使Case_Section
成为使用row_number()划分为case_id
的计算列。
[另一个提示者建议这样做,但是如果您按case_data或任何其他不能保证顺序的列进行排序,则可能会导致该值在插入数据并更改行顺序时会四处移动。
如果您的计算结果为row_number() over(partition by case_id order by [ColumnThatIncreasesWithEachInsert])
,则这些值将随时间稳定。