在SQL视图中增加一列

时间:2014-09-11 16:51:15

标签: sql sql-server

这是我的观点

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.请告诉我如何使这个稳定

1 个答案:

答案 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'