web-dev-qa-db-ja.com

一時テーブルへのwith cteクエリの結果の挿入

このクエリの結果を一時テーブルに保存したい:

WITH cOldest AS
(
    SELECT 
       *, 
       ROW_NUMBER() OVER (PARTITION BY [MyKey] ORDER BY SomeColumn DESC) AS rnDOB 
    FROM MyTable
)
SELECT
    C.*
 ***    Insert into #MyTempTable *** This part doesn't work  
     FROM
     cOldest C
     WHERE
     C.rnDOB = 1

前もって感謝します。

14
Ariox66

これがSQL Serverの場合:CTEはoneステートメントのみに適しているため、両方のSELECTINSERT-INSERTを使用するだけです:

WITH cOldest AS
(
    SELECT 
       *, 
       ROW_NUMBER() OVER (PARTITION BY [MyKey] ORDER BY SomeColumn DESC) AS rnDOB 
    FROM MyTable
)
INSERT INTO #MyTempTable(Col1, Col2, ....., ColN)
  SELECT Col1, Col2, ...., ColN
  FROM cOldest C
  WHERE C.rnDOB = 1

これには、#MyTempTable もう存在している。 SELECTを使用して作成する場合は、次の構文を使用します。

WITH cOldest AS
(
 .....
)
SELECT c.*
INTO #MyTempTable
FROM cOldest c
WHERE C.rnDOB = 1
27
marc_s