2017-07-06 64 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

你能否提供一些我可以使用别名和派生表概念学习的文档。 –