1 つの CTE を 2 回参照するにはどうすればよいでしょうか? 質問する

1 つの CTE を 2 回参照するにはどうすればよいでしょうか? 質問する

ページ化された結果セットを返すことができるように行番号を含む非常に大きな共通テーブル式があります。また、結果セットをページ化する前に、クエリに一致するレコードの合計数を返すことも必要です。

with recs as (select *, row_number() over (order by id) as rownum from ......)
select * from recs where rownum between @a and @b .... select count(*) from recs

明らかに、上記のクエリは不完全ですが、これは私の主張を説明するためのものです。結果ページと一致件数の合計が必要です。20 行以上の CTE 全体を文字通りコピーして貼り付けることなく、これを実現するにはどうすればよいでしょうか。

ベストアンサー1

できるとは思わないで。マイクロソフト

共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、または CREATE VIEW ステートメントの実行スコープ内で定義される一時的な結果セットと考えることができます。

「単一の SELECT、INSERT、UPDATE、DELETE、または CREATE VIEW ステートメント」に重点を置きます。

これは、一時テーブル

CREATE TABLE #Recs
{
  .....
}
INSERT INTO #Recs
select *, row_number() over (order by id) as rownum from ......

事前にテーブルの構造がわからない場合は、次のフォームを使用して一時テーブルを作成できます。

select *, row_number() over (order by id) as rownum INTO #Recs from ......

上記の方法で一時テーブルを使用できるようになります。

おすすめ記事