我有一个带有列标识(1590 个值)的表 serviceClusters。然后我有另一个表 serviceClustersNew,其中包含 ID、文本和注释列。在此表中,我有一些文本和注释值,ID 始终为 1。下面是该表的示例:
[1,虚拟1,你好1;
1、虚拟2、你好2;
1、虚拟3、你好3;
etc.]
我现在想要的列 ID 中的值是表 serviceClusters 的连续索引加上当前行号:在我们的示例中,这将是 1591、1592 和 1593。
我尝试像这样解决问题:首先我用最大值更新了列 ID,然后我尝试添加行号,但这不起作用:
-- Update ID to the maximum value 1590
UPDATE serviceClustersNew
SET ID = (SELECT MAX(ID) FROM serviceClusters);
-- This command returns the correct values 1591, 1592 and 1593
SELECT ID+ROW_NUMBER() OVER (ORDER BY Text_ID) AS RowNumber
FROM serviceClustersNew
-- But I'm not able to update the table with this command
UPDATE serviceClustersNew
SET ID = (SELECT ID+ROW_NUMBER() OVER (ORDER BY Text_ID) AS RowNumber FROM
serviceClustersNew)
通过发送最后一个命令,我收到错误“语法错误:子查询中不允许使用有序分析函数。”。您有什么建议吗?我该如何解决这个问题?我知道我可以使用易失性表或添加列来做到这一点,但是有没有办法不创建新表/更改当前表?
您必须使用 UPDATE FROM 重写它,语法有点庞大:
UPDATE serviceClustersNew
FROM
(
SELECT text_id,
(SELECT MAX(ID) FROM serviceClusters) +
ROW_NUMBER() OVER (ORDER BY Text_ID) AS newID
FROM serviceClustersNew
) AS src
SET ID = newID
WHERE serviceClustersNew.Text_ID = src.Text_ID
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)