Row_Number() with union query

社会主义新天地 提交于 2019-12-20 09:29:00

问题


I have an sql query that returns rows from two tables with same column names. I need a row number of all records in a complete result set.

Following is the query

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

How should it be done?

EDIT: And what if I only need to return a row_num where VersionNumber is lets say 5.


回答1:


Try this:

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

TO filter by version number 5 use:

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 



回答2:


A slightly better way would be :-

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 


来源:https://stackoverflow.com/questions/5190240/row-number-with-union-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!