2010-09-09 80 views
2

我正在使用单个插入语句将批记录添加到表中。我希望为每个新批次分配递增数字,但每次都从1开始。每次更新值从1开始的SQL更新记录

所以,如果我有

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.我不想使用游标。

+0

您打算使用哪种RDBMS? – 2010-09-09 09:22:24

+0

我正在使用MS SQL 2005 – DEH 2010-09-09 09:33:05

回答

2

排名功能ROW_NUMBER应该做你需要的。你没有提到关于序列号应该如何分配的任何具体的规则,所以我使用的名字在这里完成它:

INSERT targetTable(Batch,Name,IncementingValue) 
SELECT BatchId, 
     Name, 
     ROW_NUMBER() OVER (ORDER BY Name) 
FROM sourceTable 
+0

非常感谢。 – DEH 2010-09-09 09:45:30

+0

@Ed - 你知道我是否可以通过update语句应用这些值,例如: 更新从SegmentationKeysUnconstrained SegmentationKeysUnconstrained 组batchrownumber = ROW_NUMBER()以上(由trackingtokenid顺序) 其中batchid = '58D73880-31B1-40AF-A749-7F6EBEAAF3E4' – DEH 2010-09-09 14:36:51

+0

我的问题是,我需要分配一组ROW_NUMBER的( )值在几个插入语句,所以我实际上不能在插入点使用row_number - 我必须做几次插入完成后。 – DEH 2010-09-09 14:39:00

0

我需要完成的日期和数字格式类似的东西。

希望有人会发现这个例子有用。

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