1

以下は仮想概念を使用したクエリですが、「仮想テーブル」 概念を使用せずに最適化された形式が必要です。

 with TEMP AS
          (

          Select RN from                                                            
          (                                                                         
          SELECT TCTITL,                                                            
          ROW_NUMBER() OVER ( ORDER BY TCTITL asc ) AS RN FROM PVTC ORDER BY        
          TCTITL asc                                                                
          )T 

          WHERE ((TCTITL >= 'AAPS  ' ))                                             
          ORDER BY TCTITL asc fetch first row only  )  

          , mytab as
          (

          Select * from
          (                                                           
         ( SELECT TCTITL, TCEDUR, TCSTZF, TCTTLE, TCLSHN, TCCEQ3,                  
        ROW_NUMBER() OVER ( ORDER BY TCTITL asc ) AS RN                           
         FROM PVTC ORDER BY TCTITL asc  )                                          
          ) Q

          ,  TEMP where Q.RN                                                     
          between (TEMP.RN + 0) and ( TEMP.RN + 3)                                  
          )
          select * from mytab  

注:結果が 1 から 10 のテーブルがありますが、3 から 10 とだけ言う 2 つのポインター間の結果が必要です。これがこのクエリの目的です。

更新: 5 つのレコードがあり、範囲 1 t0 5 の間の Row_Number 2 に基づいてレコードを選択したい (1,2,3,4,5 は Row_number を示す)

   col1    col2    col3 
    a   b   c   
    a1  b1  c1  
    -------------------------
    ---------------------------
    --------------------------
    a5  b5  c5  
4

1 に答える 1

0

tctitl >= 'AAPS 'の最初の 4 行と、テーブル内でのランクを示す行番号を取得したいだけのようです。もしそうなら、これはトリックを行うと思います:

select * from (
        select pvtc.*, row_number() over (order by tctitl) as rn from pvtc 
    )
    where (tctitl >= 'AAPS  ' )                                             
    order by tctitl
    fetch first four rows only;
于 2012-10-23T13:54:32.257 に答える