Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Sql Server 2008中,如何对每个客户的发货进行编号_Sql_Sql Server_Sql Server 2008_Row Number - Fatal编程技术网

在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的回答,初始设置是直接的,但是保持它最新是一件痛苦的事。