在Sql Server 2008中,如何对每个客户的发货进行编号
我有两张桌子:客户------->发货 例如,我想为每个客户提供一个唯一的发货编号在Sql Server 2008中,如何对每个客户的发货进行编号,sql,sql-server,sql-server-2008,row-number,Sql,Sql Server,Sql Server 2008,Row Number,我有两张桌子:客户------->发货 例如,我想为每个客户提供一个唯一的发货编号 CustomerID ShipmentID ShipmnetNumber 10 50 1 10 51 2 10 55 3 15 56
CustomerID ShipmentID ShipmnetNumber
10 50 1
10 51 2
10 55 3
15 56 1
15 57 2
15 58 3
17 59 1
17 60 2
等等
如何在sql server 2008中执行此操作要通过查询获取编号,您可以执行此操作
select CustomerID,
ShipmentID,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipmentNumber
from Shipment
;with S as
(
select ShipmentNumber,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipNum
from Shipment
)
update S
set ShipmentNumber = ShipNum
如果要使用ShipmentNumber(新添加的列)更新表,可以这样做
select CustomerID,
ShipmentID,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipmentNumber
from Shipment
;with S as
(
select ShipmentNumber,
row_number() over(partition by Shipment.CustomerID
order by ShipmentID) as ShipNum
from Shipment
)
update S
set ShipmentNumber = ShipNum
您正在谈论存储此
ShipmentNumber
列吗?如果是这样的话,那么在SQLServer中就没有很好的方法来实现这一点。Inserts需要找出当前分区Max
,并阻止对同一分区的其他并发插入,等等。即使使用(With语句)也不能这样做吗??可以直接通过选择和行号
来完成,但是发货号
不会随着时间的推移而稳定。请解释一下你想在这里做什么(动机)好吧,我打算存储它,但是我怎么做呢?按照Mikael的回答,初始设置是直接的,但是保持它最新是一件痛苦的事。