在SQL中设置顺序非身份数字



我希望有关将数字插入行并自动增加其序列的最佳方法提供一些建议。我正在使用SQL Server 2014,我知道有序列对象。我玩过临时桌子,没有什么,但是我只是难以将自己的思想缠住。以下是我正在使用的数据:

Table1: OrderList
Column: LineNumber
Table2: WatchList
Column: LineNumber

订单列表表中的亚麻数自动由另一个系统生成,并导致数字乘以10k。因此,10000,20000,30000。

从订购列表中的数据更新到监视列表表中。然后添加了新的行,但没有亚麻的行。因此,在监视列表表中看起来像:

Item / LineNumber / xzy
134   10000   blah blah
1432  20000   blah blah blah
433   NULL    blah blah
839   NULL    blah blah

我想做的是运行更新,以将30000和40000填充到那些无效字段,老实说,我不确定最好的方法。

如果您有一些建议或方向最好的道路,我将不胜感激。

您可以通过cte和row_number()。

更新

@YourTable只是一个指示的表变量。

另外,over (Order by Item)是任意选择。您可以有over (Order by (Select NULL))或其他序列。

示例

Declare @YourTable Table (OrderNumber varchar(50),[Item] varchar(50),[LineNumber] int,[xzy] varchar(50))
Insert Into @YourTable Values 
 (2525,134,10000,'blah blah')
,(2525,1432,20000,'blah blah blah')
,(2525,433,NULL,'blah blah')
,(2525,839,NULL,'blah blah')
,(5050,500,70000,'blah blah')
,(5050,600,80000,'blah blah blah')
,(5050,700,NULL,'blah blah')

;with cte as (
    Select *
          ,RN =10000 * Row_Number() over (Partition By OrderNumber Order by Item) + (Select max(LineNumber) from @YourTable Where OrderNumber=A.OrderNumber)
     From  @YourTable A
     Where LineNumber is null
)
Update cte Set LineNumber = RN
Select * from @YourTable

更新的源

OrderNumber Item    LineNumber  xzy
2525        134     10000       blah blah
2525        1432    20000       blah blah blah
2525        433     30000       blah blah
2525        839     40000       blah blah
5050        500     70000       blah blah       --<< Notice New OrderNumber
5050        600     80000       blah blah blah
5050        700     90000       blah blah

相关内容

  • 没有找到相关文章

最新更新