视图的行号,其中数字不受where子句的影响

时间:2013-03-21 10:55:44

标签: sql sql-server view

SQL Server 2008

我有一个有很多行的视图,也可以多次拥有确切的行。我已经尝试过ROW_NUMBER()OVER(ORDER BY col1)作为row_id但遇到了问题:

使用JOIN或WHERE子句时,row_id会动态调整为新的结果集。我需要的是row_id来表示row_id值,该值是在视图中为该行提供的,没有任何JOIN或WHERE子句。

有什么想法吗?

编辑:我添加了一个例子,应该在发布之前完成。

没有WHERE子句:

  

SELECT ROW_NUMBER()OVER(ORDER BY col1)as row_id,result。*
  从
  (

     
    

SELECT'Adam'col1,'West'col2
    UNION ALL
    SELECT'Adam'col1,'Cole'col2
    UNION ALL
    SELECT'Adam'col1,'West'col2
    UNION ALL
    SELECT'Danny'col1,'West'col2

  
     

)结果

结果:

row_id  col1    col2
1       Adam    Cole
2       Adam    West
3       Adam    West
4       Danny   West

现在我使用WHERE子句

  

SELECT ROW_NUMBER()OVER(ORDER BY col1)as row_id,result。*
  从
  (

     
    

SELECT'Adam'col1,'West'col2
    UNION ALL
    SELECT'Adam'col1,'Cole'col2
    UNION ALL
    SELECT'Adam'col1,'West'col2
    UNION ALL
    SELECT'Danny'col1,'West'col2

  
     

)结果
  在哪里col2 ='西'

结果:

row_id  col1    col2
1       Adam    West
2       Adam    West
3       Danny   West

期望的结果:

row_id  col1    col2
2       Adam    West
3       Adam    West
4       Danny   West

1 个答案:

答案 0 :(得分:0)

您可以在子查询中生成行号。这些不受外部查询中的joinwhere子句的影响:

select  *
from    (
        select  row_number() over order by col1) as rn
        ,       *
        from    YourTable
        ) as YourTableWithRowNumber
join    OtherTable
on      YourTableWithRowNumber.id = OtherTable.YourTableId
where   YourTableWithRowNumber.col1 not like '%excludeme%'