もう一度問題が発生しました:D最初に少し情報があります:あるテーブルから別のテーブルにデータをコピーしようとしています(構造は同じです)。ここで、1つのセルをインクリメントする必要があります。グループごとに1から始まります(履歴のように)。
私はこのテーブルを持っています:
create table My_Test/My_Test2 (
my_Id Number(8,0),
my_Num Number(6,0),
my_Data Varchar2(100));
(my_Id、my_NumはネストされたPKです)
新しい行を挿入する場合は、の値がmy_id
すでに存在するかどうかを確認する必要があります。
これが当てはまる場合はmy_Num
、このIDに次を使用する必要があります。
私は私のテーブルにこれを持っています:
My_Id My_Num My_Data
1 1 'test1'
1 2 'test2'
2 1 'test3'
ここで1の行を追加するmy_Id
と、行は次のようになります。テーブルにこれがあります。
My_Id My_Num My_Data
1 3 'test4'
これは非常に簡単に聞こえますが、SQLで作成する必要があり、SQL Serverでも同じ問題が発生し、これを使用しました。
Insert Into My_Test (My_Id,My_Num,My_Data)
SELECT my_Id,
(
SELECT
CASE (
CASE MAX(a.my_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
WHEN NULL
THEN 1
ELSE (
CASE MAX(a.My_Num)
WHEN NULL
THEN 0
Else Max(A.My_Num)
END) + b.My_Num
END
From My_Test A
where my_id = 1
)
,My_Data
From My_Test2 B
where my_id = 1;
副選択で行が見つからない場合、この選択はnullを返します
ケースでmaxを使用できるようにする方法はありますか?nullを返す場合は、0または1を使用する必要がありますか?
編集:今これを使用しています:
Insert INTO My_Test ( My_Id,My_Num,My_Data )
SELECT B.My_Id,
(
SELECT COALESCE(MAX(a.My_Num),0) + b.my_Num
FROM My_Test A
Where a.My_Id = b.My_Id)
,b.My_Data
FROM My_Test2 B
WHERE My_Id = 1
THXからバーラトとOMGポニーへ
オーロに挨拶