Как вычислить номер строки заказа в SQL 2000 - PullRequest
1 голос
/ 03 декабря 2008

Я работаю с системой заказов, которая имеет две таблицы 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

Ответы [ 3 ]

3 голосов
/ 03 декабря 2008

Вы можете использовать что-то вроде этого:

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
0 голосов
/ 03 декабря 2008

Альтернативой может быть вставка ваших данных (без номера строки) в таблицу #temp, где вы добавляете столбец с идентификатором (1,1), а затем выбираете все из таблицы #temp.

0 голосов
/ 03 декабря 2008

ИМХО, вычисление его каждый раз, когда вам нужно, может закончиться головной болью, чем оно того стоит. И хотя обновление исторических номеров строк и сохранение их в базе данных может быть затруднительным, вы бы делали это только один раз ... а потом просто нужно было бы написать код, чтобы автоматизировать его позже.

Чтобы обработать удаление, вам просто нужно добавить код в существующую процедуру удаления и пересчитать для него номера строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...