带有联合查询的Row_Number()

时间:2011-03-04 05:57:42

标签: sql-server-2005

我有一个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 个答案:

答案 0 :(得分:57)

试试这个:

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 :(得分:1)

稍微好一点的方法是: -

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