这是我的观点
Create View [MyView] as
SELECT ROW_NUMBER() OVER( ORDER BY col1 ) AS id, col1, col2, col3
FROM(
Select col1, col2, col3 From Table1
Union All
Select col1, col2, col3 From Table2 ) AS MyResults
GO
当我运行视图时,当我使用where条件时,行号与行号不匹配。例如select * from myview
我在col1中得到20条记录,得到行号为15.但是当我使用过滤器select * from myview where col1 = 'Mark'
并将行现在变为14.请告诉我如何使这个稳定
答案 0 :(得分:0)
我可以理解这种混淆:你期望视图创建一个结果集;但正如您所发现的那样,观点不会那样。你在做什么相当于:
SELECT ROW_NUMBER() OVER( ORDER BY col1 ) AS id, col1, col2, col3
FROM
(
Select col1, col2, col3 From Table1 where col1 = 'Mark'
Union All
Select col1, col2, col3 From Table2 where col1 = 'Mark'
) AS MyResults
您想要的是创建一个定义您的排名的结果集。一种方法是使用公用表表达式:
WITH MyResults(RowNumber, id, col1, col2, col3)
AS
(
SELECT ROW_NUMBER() OVER( ORDER BY col1 ) AS id, col1, col2, col3
FROM(
Select col1, col2, col3 From Table1
Union All
Select col1, col2, col3 From Table2 ) AS InnerResults
)
SELECT * FROM MyResults WHERE col1 = 'Mark'