1

SQL Server 2008

我有一个包含许多行的视图,其中也可以多次获得确切的行。我已经尝试将 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, result.*
FROM
(

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 ) 作为 row_id, result.*
FROM
(

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

) 结果
WHERE col2='West'

结果:

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
4

1 回答 1

1

您可以在子查询中生成行号。这些不受外部查询中的joinor子句的影响: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%'
于 2013-03-21T11:04:29.620 回答