我正在尝试计算sql中表中不同的行,这些行将输出对应于订单的值。
我有CustomerID和OrderNumber,如果客户在特定日期在系统中放置了超过1个订单,我希望能够用下面的数字标记每个不同的订单(这个数字需要随着每次更改而增加或者来自多行的订单号(因为行还包含所购买的每件商品)
OrderNumber CustomerID Seq Number
BINV0024536 FOBJAMBLU 1
BINV0024536 FOBJAMBLU 1
BINV0024789 FOBJAMBLU 2
BINV0024789 FOBJAMBLU 2
答案 0 :(得分:1)
对于SQL SERVER,您可以使用DENSE_RANK()。
SELECT OrderNumber, CustomerID,
DENSE_RANK() OVER(ORDER BY CustomerID, OrderNumber) AS Seq
FROM [YOURTABLE]
如果您想使用不同的customerID重置seq,那么您还必须使用PARTITION
SELECT OrderNumber, CustomerID,
DENSE_RANK() OVER(PARTITION BY CustomerID ORDER BY CustomerID, OrderNumber) AS Seq
FROM [YOURTABLE]
答案 1 :(得分:0)
您可以生成虚拟rownum并从另一个select中加入:
SELECT ot.orderNumber, ot.customerId, usr.rowCounter
FROM Order ot
INNER JOIN
(SELECT otr.orderNumber, otr.customerId, rownum as rowCounter
FROM Order otr
GROUP BY otr.orderNumber, otr.customerId
ORDER BY otr.orderNumber, otr.customerId
) usr
ON usr.orderNumber = ot.orderNumber AND usr.customerId = ot.orderNumber