2016-04-25 70 views
1

我需要关于必须与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 

它是如何能够在数据库中更新表(此处:SECOND_TABLE)的ID列与MY_ROW中的值?

非常感谢......

+0

你是什么意思,你总能获得价值1?你从哪里得到价值1?在my_row? –

+0

我想你想[ROWNUMBER()](https://msdn.microsoft.com/en-us/library/ms186734.aspx)而不是RANK()。 – nscheaffer

+0

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()相同 – Oliver

回答

1

使用ROW_NUMBER()而不是排名():

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 
+0

谢谢大家。 ..我的问题要深入一些......如何将此代码的输出与“update”语句组合起来,以便将数据填充到SECOND_TABLE.ID中?因此我需要一个示例代码。 – Oliver

+0

你不能创建一个新表并正确填充它吗? –

相关问题