2017-07-06 105 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; 

我知道,甲骨文強制派生表的別名規則,可能還有其他數據庫。請注意,您在SELECT語句中使用的別名沒有任何用處,因爲這些值只是被插入。如果你想插入兩次x4然後重複兩次。

+0

我正在azure數據倉庫中運行這個 –

+0

讓我們知道這個答案對您有幫助。 –

+0

你能否提供一些我可以使用別名和派生表概念學習的文檔。 –