如何将具有特定值的列添加到现有数据库表
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)将具有不同列的表迁移到现有表中?