1

SQL Server 2008

多数の行があるビューがあり、正確な行を複数回持つことも可能です。すでにROW_NUMBER()OVER(ORDER BY col1)をrow_idとして試しましたが、問題が発生しました。

JOINまたはWHERE句を使用する場合、row_idsは新しい結果セットに動的に調整されます。代わりに必要なのは、JOIN句またはWHERE句を使用せずにビュー内のその行に指定されたrow_id値を表すrow_idです。

何か案は?

編集:私は例を追加しました、投稿する前にそれを行うべきでした。

WHERE句なし:

SELECT ROW_NUMBER()OVER(ORDER BY col1)as 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)as 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 に答える