自动生成相对于另一列的列值

时间:2010-07-21 07:33:13

标签: sql sql-server

在我的应用程序中,当我插入数据时,我必须根据其他列中的值为特定列生成顺序值。我可以在SQL Server 2005中设置任何属性。

我正在更详细地解释我的要求:

我有两个字段id和branchid的表,我必须为id的每个唯一值自动插入branchid的顺序值

那是

id   -  BranchId
1    -    1,
1    -    2,
1    -    3,   

现在,如果我插入一个id值为2的行,那么branchid应该自动设置为值1

谢谢和问候 苏拉杰。

4 个答案:

答案 0 :(得分:2)

我不知道您可以设置任何字段值/属性。

一种可能的解决方案: - 在Inserts上设置一个触发器,为你创建正确的BranchId

答案 1 :(得分:1)

你不需要第二列。只需使用row_number()函数和partition by子句

declare @t table(id int)
insert into @t
select 1 union all
select 1 union all
select 1 union all
select 2
select id,row_number() over (partition by id order by id) as Brandid from @t

答案 2 :(得分:0)

使用公式字段,如果逻辑清除,则为其创建函数 在公式字段的第二列中使用该函数,它会自动设置该值。

答案 3 :(得分:0)

嗯,Madhivanan的方法在您选择数据时会起作用,我很欣赏,因为这也会减少存储空间。如果想要将生成的BrandId保留在表中,这只是一种方法。

在INSET值为Id列后,您只需要执行UPDATE。

--Table with sample data
DECLARE @Tbl TABLE(ID INT, BRANDID INT)
INSERT INTO @Tbl(ID) VALUES (1),(1),(1),(2)

--extract data
SELECT * FROM @Tbl


--Populate BrandId with auto generated id
;WITH POPULATEBRANDID
AS
(
SELECT ID, BRANDID, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS [myBRANDID]
FROM @Tbl
)
UPDATE POPULATEBRANDID
SET BRANDID=myBRANDID
WHERE BRANDID IS NULL

--extract data
SELECT * FROM @Tbl

让我知道它是否适合你。