SQL 更新行号

标签 sql numbers teradata

我有一个带有列标识(1590 个值)的表 serviceClusters。然后我有另一个表 serviceClustersNew,其中包含列 ID、文本和注释。在此表中,我有一些文本和评论值,ID 始终为 1。这是该表的示例:

[1, dummy1, hello1;

1,虚拟2,你好2;

1, dummy3, hello3;

等]

我现在想要列 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

关于SQL 更新行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969517/

相关文章:

python - 在 Linux RHEL 上配置 Teradata 和 python 之间连接的正确方法

sql - 通过 VBA 将 3000 个插入快速上传到 Teradata

sql - 在路径枚举的情况下,SQL 的 LIKE 如何工作?

loops - 在Teradata中捕获插入错误

mysql - MySQL WHERE 子句中的当前日期

C# 是否有内置函数可以将格式化的字符串转换回数字?

php - 如何使用自定义字符集增加字符串

java - 五个数字中最大的

mysql - 使用 sqlalchemy 测量 mysql-server 上的插入时间和查询时间

sql - 在postgres中获取每天的第一次和最后一次