Вместо
SELECT DISTINCT OrderId,
ROW_NUMBER() OVER (ORDER BY OrderId) AS RowNum
FROM @OrdersTemp
используйте
SELECT OrderId,
ROW_NUMBER() OVER (ORDER BY OrderId) AS RowNum
FROM @OrdersTemp
GROUP BY OrderId
Это интересный случай другого различия между SELECT DISTINCT
и SELECT GROUP BY
, который проявляется, когда список выбора включает функцию ранжирования.
В первом запросе выходные данные содержат дубликаты OrderId
значений от @OrdersTemp
, поскольку функция ранжирования оценивается до DISTINCT
применяется.Напротив, второй запрос сначала группирует строки по OrderId
(т.е. эффективно выбирает сначала отдельные значения OrderId
), а затем применяет ранжирование.