2009-04-26 10 views

答えて

3

SQL Server 2005(および2008)では、OVER句と組み合わせてROW_NUMBER functionを使用して、行のカウント順序を決定できます。

更新

うーん。私は実際にOracleのバージョンが何かを知っていません。行ごとに(テーブル全体に渡って)一意の数値を与えている場合は、SQL Serverでそれを行う方法があるとは思えません。 SQL ServerのROW_NUMBER()は、現在のクエリで返された行に対してのみ機能します。

1

あなたはid列を持っている場合は、あなたがこれを行うことができますの順序として、もちろん

select a.*, 
(select count(*) from mytable b where b.id <= a.id) as rownum 
from mytable a 
order by id; 

、あなたが同じ(または反対)の順序でrownumsを注文することができるしているこの唯一の作品をids。あなたは、行の適切なサブセットを選択している場合

、もちろんあなたは、全体の選択やサブクエリに同じ述語を適用する必要があります。

select a.*, 
(select count(*) from table b where b.id <= a.id and b.foo = 'X') as rownum 
from table a where a.foo = 'X' 
order by id; 

明らかに、これは特に効率的ではありません。

+0

SQL Server 2005のとはい – gbn

+0

上記の非常に非効率的な、私は上記の、述べたように。しかし、あなたがそれをしなければならない場合、あなたは2005年以上をしていないと、あなたは何をしなければなりません。 – tpdi

0

私の理解に基づいて、ranking functionsおよび/またはTOP clauseを使用する必要があります。 SQL Serverの機能は特定のものであり、Oracleのものは2つの概念を組み合わせています。

ランキング機能は単純です:ここではTOPを使用する理由があります。 注:あなたがすることができませんROWNUMBERに直接...

'Orable: 
select 
    column_1, column_2 
from 
    table_1, table_2 
where 
    field_3 = 'some value' 
and rownum < 5 

--MSSQL: 
select top 4 
    column_1, column_2 
from 
    table_1, table_2 
where 
    field_3 = 'some value' 
関連する問題