Row_Number () с запросом объединения - PullRequest
32 голосов
/ 04 марта 2011

У меня есть SQL-запрос, который возвращает строки из двух таблиц с одинаковыми именами столбцов.Мне нужен номер строки всех записей в полном наборе результатов.

Ниже приведен запрос

select Id, VersionNumber from documents where id=5 
Union all  
select Id, VersionNumber from versions where id=5
order by VersionNumber desc

Как это должно быть сделано?

РЕДАКТИРОВАТЬ: А что, если мне нужно только вернуть row_num, где VersionNumber, скажем, 5.

Ответы [ 2 ]

57 голосов
/ 04 марта 2011

Попробуйте это:

SELECT *, ROW_NUMBER() OVER(ORDER BY Id) ROW_NUM
  FROM (
        select Id, VersionNumber from documents where id=5 
        Union all  
        select Id, VersionNumber from versions where id=5
       ) a
order by VersionNumber desc

Для фильтрации по версии № 5 используйте:

SELECT * 
FROM   (SELECT *, 
               Row_number() OVER(ORDER BY versionnumber DESC, id) row_num 
        FROM   (SELECT id, 
                       versionnumber 
                FROM   documents 
                WHERE  id = 5 
                UNION ALL 
                SELECT id, 
                       versionnumber 
                FROM   versions 
                WHERE  id = 5) a) b 
WHERE  version = 5 
1 голос
/ 02 мая 2018

Немного лучше было бы: -

with resultset1 as(
   select Id, VersionNumber from documents where id=5 
   Union all  
   select Id, VersionNumber from versions where id=5
), resultset2 as(
   select Id, VersionNumber, ROW_NUMBER() OVER(ORDER BY Id) ROW_NUM
   from resultset1
)
select * from resultset2 WHERE VersionNumber = 5 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...