2011-02-02 27 views
1

ユニオンクエリのページングを実装する必要がありますが、エラー "メッセージ102、レベル15、状態1、行14 'の近くに構文が正しくありません。私はこのlinkから見つけた例に従った。SQL Server 2008 R2ページング

select * 
    from (select Id, 
       row_number() OVER (order by Id asc) as RowNumber 
      from (select Id 
        from (select Id 
          from Table1) as table1 
       union all 
       select Id 
        from (select Id 
          from Table2) as table2)) as t Derived 
    WHERE RowNumber > 5 
    and RowNumber <= 10 
+0

何が起こっているか間違いはありますか? – Axarydax

+0

エラーメッセージを含む応答が更新されました。 – newbie

+0

私はSQL Serverのエラー位置が一度も好きではありませんでしたが、私はコードに12行を数えています。貼り付けていないものはありますか? – donkim

答えて

3

用途:

SELECT u.* 
    FROM (SELECT t.id, 
       ROW_NUMBER() OVER (ORDER BY t.id) as rownum 
      FROM (SELECT t1.id 
        FROM TABLE1 t1 
       UNION ALL 
       SELECT t2.id 
        FROM TABLE2 t2) as t) AS u 
WHERE u.rownum > 5 
    AND u.rownum <= 10 

それはあなたのクエリは、「派生」と呼ばれる派生テーブルの閉じ括弧がありませんでしたように私には見えますが、UNIONでのサブクエリの必要がありませんでした私はそれらを削除しました。

+0

UNION ALL副選択のための行の紛失ではなく、テーブルの別名が欠落しているようです。とにかく、あなたはそれをもっとうまく再構成しました。 –

+0

私はそれが好きです。 SELECT TOP(5)u。* FROM(SELECT t1.id、 )ROW_NUMBER()OVER(ORDER BY t.id)を丸として返します。 FROM(SELECT t1.idFROM TABLE1 t1 UNION ALL SELECT t2.id FROM TABLE2 t2)as AS u WHERE u.rownum> 5 ' –

0

サブクエリから選択した場合、エイリアスを指定する必要があります。外側の2つのサブクエリがありますが、エイリアスは1つのみです。次のようになります。from Table2) as tabl2) as t) as t

1

あなただけの1つの括弧を移動する必要があります:from Table2) as table2) as t) Derived

をお読みください

from Table2) as table2)) as t Derivedまた、表2にしてTABLE1とTable2のに表1を作るサブクエリの一部を削除することもできますが、私はそこだと仮定そこにある人のためのいくつかのreaon(より複雑な別のクエリに基づくようなもの)

+0

いいえ、それほど複雑ではなく、あなたのアドバイス、うまく働いています! – newbie

1
select * 
    from (select Id, 
       row_number() OVER (order by Id asc) as RowNumber 
      from (select Id 
        from Table1 as table1 
       union all 
       select Id 
        from Table2)p)t 
    WHERE RowNumber > 5 
    and RowNumber <= 10