1
У меня есть следующий запрос, который хорошо работает в Oracle и DB2. Но он не работает в SQL Server 2008, потому что функция First_Value недоступна с тем же. Есть ли работа в 2008 году?Альтернатива для First_Value() в SQL Server 2008
select NameGuid, Name, AncestorGuid, ProductGuid, PathLength
from (
select
NameGuid,
Name,
AncestorGuid,
ProductGuid,
PathLength,
-- take every row from original query with the same Name as this,
-- order those rows by PathLength (and NameGuid to disambiguate)
-- and return the NameGuid of the first row in that "partition"
first_value(NameGuid) over (partition by Name order by PathLength asc, NameGuid asc) MinNameGuid
from (
... your original query ...
)
)
where
-- return rows whose NameGuid is the same as the NameGuid calculated by first_value(...)
NameGuid = MinNameGuid
Примечания: Запрос был ответ на мой предыдущий post
Вы можете сделать что-то подобное с подзапросом и 'ROW_NUMBER()'. –
Я попытался заменить first_value() на row_number(), но я получаю 'Ошибка в командной строке: 1 Столбец: 0 Отчет об ошибке: Ошибка SQL: предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах, и общие табличные выражения, если не указано значение TOP или FOR XML. ' – Firu
Это не так просто - вам нужно вычислить row_number в подзапросе и присоединиться к этому. У меня нет полного ответа, но я подумал, что вы можете начать. –