创建2个表ID,第一个递增时第二个重新启动

问题描述 投票:0回答:2

我有下表:

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以这种方式递增?

sql-server sql-server-2017
2个回答
0
投票

您可以使用行号:

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

0
投票

如果可以将IDENTITY或InsertedDateTime列添加到表中,则可以使用它来使Case_Section成为使用row_number()划分为case_id的计算列。

[另一个提示者建议这样做,但是如果您按case_data或任何其他不能保证顺序的列进行排序,则可能会导致该值在插入数据并更改行顺序时会四处移动。

如果您的计算结果为row_number() over(partition by case_id order by [ColumnThatIncreasesWithEachInsert]),则这些值将随时间稳定。

© www.soinside.com 2019 - 2024. All rights reserved.