【问题标题】: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

标签: sql oracle db2 window-functions


【解决方案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?因此,我需要一个示例代码。
  • 你不能创建一个新表并正确填充它吗?
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多