2016-04-25 15 views
1

DB2とOracleで実行するSQL文に関するアドバイスが必要でした。特定の値を持つ列を既存のデータベーステーブルに追加する方法

IDテーブルのないデータベーステーブルが設定されています。 ID列を追加することは問題ではありませんが、絶対に各行の行番号を入力する必要があります。 rank()が完璧であることがわかりましたが、ここでは常に値 '1'を取得するため、特定の値を選択できません。私はそれがデータベーステーブルのIDカラム(ここで:SECOND_TABLE)を更新することが可能である方法

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 

を必要とすること

以下に説明するように、私は中間テーブルを設定

、I出力のすべてのデータとMY_ROWの値は?

おかげでたくさん...

+0

あなたは常に値1を得ることを何をすることによって意味ですか?あなたはどこで値1を得ますか? my_rowで? –

+0

RANK()ではなく[ROWNUMBER()](https://msdn.microsoft.com/en-us/library/ms186734.aspx)が必要です。 – nscheaffer

+0

SELECT ROWNUMBER()OVER(CODE ASC BY ORDER)MY_ROW、CODE、BDV_KFWSTAAT
FROM LANDは、それぞれが異なる数
SELECT ROWNUMBERを有する(そのうち200の以上の結果を返すない)MY_ROW(CODE ASC BY ORDER)OVER、 CODE、LAND FROM BDV_KFWSTAAT 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

ありがとうございました。 ..私の問題は少し深くなる...どのようにSECOND_TABLE.IDにデータを埋めるためにこのコードの出力を "更新"ステートメントと組み合わせることが可能ですか?したがって、私は例のコードが必要でした。 – Oliver

+0

新しいテーブルを作成して正しく挿入できませんか? –

関連する問題