2013-03-21 48 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