2017-07-06 9 views
0

誰かが私がここで間違っていることを教えてもらえますか?声明に何が間違っていますか?カンタが構文エラーを見つけたようです

INSERT INTO dbo.a1 
    select x1 as id, x2 as enc_id, x3 as dev,x4 as mang, x4 as sre, x5 as phase,x6, x7, x8 
    from 
    (select *, 
    row_number() over(partition by x2 order by x8) as rank 
    from ccsm.n9 where xx=1 and xx_pat=1 and xx_encz='Tesz') 
    where rank=1; 

答えて

1

あなたが使用しているSQLのバージョンを語ってくれたことはありませんが、一つの可能​​性は、あなたの派生テーブルがエイリアスを必要としていることである:

INSERT INTO dbo.a1 
SELECT t.x1, t.x2, t.x3, t.x4, t.x4, t.x5, t.x6, t.x7, t.x8 
FROM 
(
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY x2 ORDER BY x8) AS rank 
    FROM ccsm.n9 
    WHERE xx = 1 and xx_pat = 1 and xx_encz = 'Tesz' 
) t 
WHERE t.rank = 1; 

私はOracleが派生テーブルの別名規則を施行することを知っている、と可能性としては他のデータベースも同様です。 SELECTステートメントで使用していたエイリアスは、値が挿入されているだけなので意味がないことに注意してください。 x4を2回挿入する場合は、それを2回繰り返すだけです。

+0

azure datawarehouseでこれを実行しています –

+0

この回答が役に立ったかどうかお知らせください。 –

+0

エイリアスと派生テーブルの概念を使用して学ぶことができるドキュメントを私に提供できますか? –

関連する問題