Я работаю с системой заказов, которая имеет две таблицы Order и OrderLine, довольно стандартные вещи. Я хочу определить номер строки заказа для строк заказа относительно заказа, например
Orderid Orderlineid белье № 1003 *
1 1 1
2 2 1
2 3 2
3 4 1
4 5 1
4 6 2
OrderLineId - это столбец идентификаторов. Я не хочу хранить номер строки как данные в базе данных по двум причинам. Во-первых, в системе уже существует множество существующих заказов и строк, и ретроспективное добавление данных - головная боль, которую я хотел бы избежать. Во-вторых, если пользователь удалит строку, мне потребуется пересчитать номера строк для всего заказа.
В SQL 2005 я могу сделать это легко, используя функцию 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