如何将具有特定值的列添加到现有数据库表

Posted

技术标签:

【中文标题】如何将具有特定值的列添加到现有数据库表【英文标题】:How to add a column with specific values to an existing database table 【发布时间】:2016-04-25 12:48:00 【问题描述】:

我需要关于必须与 DB2 和 Oracle 一起运行的 SQL 语句的建议。

前段时间建立了一个没有 ID 列的数据库表。添加 ID 列不是问题,但我绝对需要用每行的行号填充它。 我发现 rank() 将是完美的,但在这里我无法选择特定值,因为这样我总是得到值“1”。

当我如下所述设置中间表时,我会输出我需要的所有数据

WITH MY_TEMP_TABLE AS
(
    SELECT RANK() OVER (ORDER BY CODE ASC) MY_ROW, CODE, LAND  
    FROM SECOND_TABLE
) 
SELECT *
FROM SECOND_TABLE
INNER JOIN MY_TEMP_TABLE ON SECOND_TABLE.CODE=MY_TEMP_TABLE.CODE 

如何使用 MY_ROW 中的值更新数据库表(此处为 SECOND_TABLE)中的 ID 列?

非常感谢...

【问题讨论】:

你总是得到值 1 是什么意思?你从哪里得到值 1?在我的行中? 我想你想要ROWNUMBER()而不是RANK()。 SELECT ROWNUMBER() OVER (ORDER BY CODE ASC) MY_ROW, CODE, LAND FROM BDV_KFWSTAAT 确实返回了 200 多个结果,每个结果都有不同的数字 SELECT ROWNUMBER( ) OVER (ORDER BY CODE ASC) MY_ROW, CODE, LAND FROM BDV_KFWSTAAT where code='DE' 返回值 '1' 与我使用的位置无关。这样我就无法区分结果。 rank() 和 rownumber() 的问题是一样的 请edit您的问题并添加一些示例数据和基于该数据的预期输出(请格式化文本,no screen shots) 【参考方案1】:

使用 row_number() 代替 rank():

WITH MY_TEMP_TABLE AS
(
    SELECT row_number() OVER (ORDER BY CODE ASC) MY_ROW, CODE, LAND  
    FROM SECOND_TABLE
) 
SELECT *
FROM SECOND_TABLE
INNER JOIN MY_TEMP_TABLE ON SECOND_TABLE.CODE=MY_TEMP_TABLE.CODE 

【讨论】:

到目前为止谢谢大家...我的问题更深了...如何将此代码的输出与“更新”语句结合起来,以便将数据填充到 SECOND_TABLE 中。 ID?因此,我需要一个示例代码。 你不能创建一个新表并正确填充它吗?

以上是关于如何将具有特定值的列添加到现有数据库表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?

如何将具有外键的 NOT NULLABLE 列添加到已包含数据的现有表中?

如何在现有表中添加额外的列而不丢失数据

Laravel 迁移:添加具有现有列默认值的列

如何将具有值的新列添加到现有数据表?