2013-03-21 50 views
0

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

我有许多行的视图,也可能有多个确切的行。我已经尝试使用ROW_NUMBER()OVER(ORDER BY col1)作为row_id,但遇到了问题:

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

任何想法?

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

没有WHERE子句:

SELECT ROW_NUMBER()OVER(ORDER BY COL1)作为ROW_ID,因此*
FROM

选择 '亚当' COL1' West'col2
UNION ALL
SELECT'Adam'col1,'Cole'col2
UNION ALL
选择 '亚当' COL1, '西方' COL2
UNION ALL
选择 '丹尼' COL1, '西方' 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。*
FROM

选择 '亚当' COL1, '西方' COL2
UNION ALL
选择 '亚当' COL1 '科尔' COL2
UNION ALL
SELECT '亚当' COL1, '西方' COL2
UNION ALL
选择 '丹尼' COL1, '西方' COL2

)导致
WHERE 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

请发表您的表结构,一些示例数据和预期的结果。 – Taryn 2013-03-21 10:58:46

回答

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%' 
+0

这真的可以 - 我会试试看,谢谢! – curmudgeon 2013-03-21 12:53:18