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
答案 0 :(得分:0)
您可以在子查询中生成行号。这些不受外部查询中的join
或where
子句的影响:
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%'