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