前提・実現したいこと
Oracle11gで下記の条件を満たすUPDATEを作りたい
カラムABCに紐づくカラムD最大値のパラメータがすべて空欄だった場合、
カラムABCが同じ値でパラメータが入っている最新のものからパラメータを持ってきてUPDATEしたい
①下記表にてキーABCDが1113のレコードに対して1111のパラメータ1,2,3の内容を入れたい
②下記表にてキーABCDが1123のレコードに対して1122のパラメータ1,2,3の内容を入れたい
テーブル名:TEST
|カラムA(IDその1)|カラムB(IDその2)|カラムC(IDその3)|カラムD(カウントUP系)|パラメータ1|パラメータ2|パラメータ3|
|:--|:--:|--:|
|1|1|1|1|あああ|いいい|ううう|
|1|1|1|2||||
|1|1|1|3||||
|1|1|2|1||||
|1|1|2|2|えええ|おおお|かかか|
|1|1|2|3||||
試したこと
下記のSQLを作成して試しましたが、うまくいきません。
下記のSQLを編集してできますでしょうか?
また他の方法等ありましたら教えてください。
SQL
1UPDATE /*+ BYPASS_UJVC */ 2( 3 SELECT 4 TEST1.カラムA 5 ,TEST1.カラムB 6 ,TEST1.カラムC 7 ,TEST1.カラムD 8 ,TEST1.パラメータ1 TEST1_パラメータ1 9 ,TEST1.パラメータ2 TEST1_パラメータ2 10 ,TEST1.パラメータ3 TEST1_パラメータ3 11 ,TEST2.パラメータ1 TEST2_パラメータ1 12 ,TEST2.パラメータ2 TEST2_パラメータ2 13 ,TEST2.パラメータ3 TEST2_パラメータ3 14 15 FROM 16 テーブルTEST TEST1 17 INNER JOIN 18 ( 19 SELECT 20 * 21 FROM 22 テーブルTEST 23 WHERE 24 (カラムA,カラムB,カラムC,カラムD) IN ( 25 SELECT 26 カラムA 27 ,カラムB 28 ,カラムC 29 ,MAX(カラムD) 30 FROM 31 テーブルTEST 32 WHERE 33 パラメータ1 IS NOT NULL 34 OR パラメータ2 IS NOT NULL 35 OR パラメータ3 IS NOT NULL 36 GROUP BY 37 カラムA 38 ,カラムB 39 ,カラムC 40 ) 41 ) TEST2 42 ON 43 TEST1.カラムA = TEST2.カラムA 44 AND TEST1.カラムB = TEST2.カラムB 45 AND TEST1.カラムC = TEST2.カラムC 46 47 WHERE TEST1.パラメータ1 IS NULL 48 AND TEST1.パラメータ2 IS NULL 49 AND TEST1.パラメータ3 IS NULL 50 AND (TEST1.カラムA,TEST1.カラムB,TEST1.カラムC,TEST1.カラムD) IN ( 51 SELECT 52 カラムA 53 ,カラムB 54 ,カラムC 55 ,MAX(カラムD) 56 FROM 57 テーブルTEST 58 GROUP BY 59 カラムA 60 ,カラムB 61 ,カラムC 62 ) 63) 64set 65 TEST1_パラメータ1 = TEST2_パラメータ1 66 ,TEST1_パラメータ2 = TEST2_パラメータ2 67 ,TEST1_パラメータ3 = TEST2_パラメータ3
回答1件
あなたの回答
tips
プレビュー