Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 2000中计算订单行号_Sql - Fatal编程技术网

如何在SQL 2000中计算订单行号

如何在SQL 2000中计算订单行号,sql,Sql,我正在使用一个订单系统,它有两个表order和OrderLine,这是非常标准的东西。我想为订单行计算一个订单行编号 Orderid Orderlineid行号 1 2 1 2 3 2 3.4.1 4.5.1 4 6 2 OrderLineId是一个标识列。出于两个原因,我不想将行号作为数据存储在数据库中。首先,系统中已经存在大量现有订单和行,回顾性地添加数据是我希望避免的一个头痛问题。其次,如果用户删除了一行,那么我需要重新计算整个订单的行号 在SQL2005中,我可以使用ROW_NUMBER

我正在使用一个订单系统,它有两个表order和OrderLine,这是非常标准的东西。我想为订单行计算一个订单行编号

Orderid Orderlineid行号
1
2 1
2 3 2
3.4.1
4.5.1
4 6 2

OrderLineId是一个标识列。出于两个原因,我不想将行号作为数据存储在数据库中。首先,系统中已经存在大量现有订单和行,回顾性地添加数据是我希望避免的一个头痛问题。其次,如果用户删除了一行,那么我需要重新计算整个订单的行号

在SQL2005中,我可以使用ROW_NUMBER函数轻松完成这项工作

Select Orderid, OrderLineid, ROW_NUMBER() 
OVER(PARTITION BY Orderid ORDER BY Orderlineid) as LineNumber
FROM OrderLine
在SQL 2000中,我是否可以这样做

我发现最接近的是排名函数(见下文),但它计算的是订单而不是行

SELECT x.Ranking, x.OrderId
FROM (SELECT (SELECT COUNT( DISTINCT t1.Orderid) FROM orderline t1 WHERE z.Orderid >= t1.Orderid)AS Ranking, z.orderid 
FROM orderline z ) x 
ORDER BY x.Ranking

您可以使用以下内容:

select 
    ol1.orderId,
    ol1.orderLineId,
    count(*) as lineNumber
from 
    orderLine ol1
    inner join orderLine ol2 
        on ol1.orderId = ol2.orderId
        and ol1.orderLineId >= ol2.orderLineId
group by 
    ol1.orderId, 
    ol1.orderLineId

嗯,每次你需要的时候计算它可能会让你头疼得不值。虽然更新历史行号并将其保存到数据库可能是一件痛苦的事情,但您只需要做一次。。。然后只需要编写代码,以便以后自动执行


要处理删除操作,只需将代码添加到现有的删除过程中,并让它重新计算行号。

另一种方法是将数据(不带行号)插入#temp表,在该表中添加标识为(1,1)的列,然后从#temp表中选择所有内容