2016-10-11 8 views
0

以下のクエリをMS SQL Server 2008標準に変換するのに役立つ必要があります。またOracleクエリからSQL Serverへのクエリ変換

SELECT * 
    FROM (WITH records 
       AS (SELECT id, 
          start_no, 
          end_no, 
          DENSE_RANK() 
           OVER (PARTITION BY id ORDER BY end_no ASC) 
           rn 
         FROM SCOTT.SHAN_TEST3) 
     SELECT id, 
       start_no, 
       end_no, 
       rn 
      FROM records 
     WHERE rn = 2) a,          -- First record 
     (WITH records 
       AS (SELECT id, 
          start_no, 
          end_no, 
          DENSE_RANK() 
           OVER (PARTITION BY id ORDER BY end_no ASC) 
           rn 
         FROM SCOTT.SHAN_TEST3) 
     SELECT id, 
       start_no, 
       end_no, 
       rn 
      FROM records 
     WHERE rn = 1) b          -- 2nd record 
WHERE a.id = b.id AND a.start_no < b.end_no 

答えて

0

二回表にアクセスする必要がありません、SQLサーバ

;WITH records 
AS 
(
SELECT id,start_no,end_no, 
DENSE_RANK() OVER (PARTITION BY id ORDER BY end_no ASC) rn 
fROM SCOTT.SHAN_TEST3 
), 
a AS 
(SELECT id,start_no, end_no,rn from cte where rn=2), 
b AS 
(SELECT id,start_no, end_no,rn from cte where rn=1) 

SELECT 
a.id, 
a.start_no, 
a.end_no, 
a.rn 
from a join b 
on a.id = b.id AND a.start_no < b.end_no 
+0

で、私は質問が正しくないか、自分自身が、テーブル 'A'であるかどうかわからないんだけど持っている必要があり 'RN = 2'とテーブル 'b'は' rn = 1'をスクリプトの投稿と同じにする必要があります。 – iamdave

+0

@iamdave:良い観測、私は、b値を変更しました – TheGameiswar

+0

cteはレコードとして置き換える必要があります..そのうまく動作します。 – callmesri

関連する問題