有人能告诉我我在这里做错了什么,我在附近的地方得到了不正确的语法。声明有什么问题?
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;
您从未告诉我们您使用的是哪个版本的 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
两次,只需重复两次即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句