2016-04-25 68 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

你不能創建一個新表並正確填充它嗎? –

相關問題