SQLを軽く本で勉強しただけの初心者です。
簡単なSELECTとUPDATEならばできますが、WHILEやLOOPはなんとなとく意味がわかる程度で、コードを書いたことはありません。
【前提】
■keycode_masterという一つのテーブルを用意し、データが20万件程度入っている。
|メーカー名|品番|管理用コード|採番用|
|:--|:--:|--:|
|AAA|10001|AAA001|1|
|AAA|10002|AAA002|2|
|AAA|10003|AAA003|3|
|AAA|10004|AAA004|4|
|BBB|AB001|BBB001|1|
|BBB|AB002|BBB002|2|
|BBB|AB003|BBB003|3|
|CCC|10001|CCC001|1|
■採番については下記のルールで実施
・採番用のフィールドにはメーカー毎の連番を入力。
・管理用キーコードは採番用のフィールド+メーカー名で生成。
下記のSQLでできた。
MERGE INTO "keycode_master" u USING ( SELECT rowid AS rid, ROW_NUMBER() OVER (PARTITION BY メーカー名 ORDER BY 品番) AS rn FROM "keycode_master" ) ON (u.rowid = rid) WHEN MATCHED THEN UPDATE SET 採番用 = rn; 管理用キーコード = メーカー名 || lpad(rn,10,'0');
【わからないところ】
■商品追加時は他のマスター(main_master)と品番でマージさせ、
メーカー名と品番をkeycode_masterにINSERTさせている。
★その際に自動で採番用の値+1からNULLの分だけ、自動採番をさせたい。
下図だと、メーカー名AAAには5と6を
メーカー名CCCには2を入れたい
|メーカー名|品番|管理用コード|採番用|
|:--|:--:|--:|
|AAA|10001|AAA001|1|
|AAA|10002|AAA002|2|
|AAA|10003|AAA003|3|
|AAA|10004|AAA004|4|
|AAA|10005||
|AAA|10006||
|BBB|AB001|BBB001|1|
|BBB|AB002|BBB002|2|
|BBB|AB003|BBB003|3|
|CCC|10001|CCC001|1|
|CCC|10002||
【聞きたいこと】
どのようなロジックで組めばいいか、まったくわかりませんので、
考えられるパターンを教えてください。
組めるかはわかりませんが、考えられるロジックとしては、
メーカー名毎に最終の値と、NULLの値を取得して、
NULLの数だけ最終の値+1をしていくというループをしていく?
その場合は、CASEでメーカー名を指定する?
です。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/22 01:49
2018/08/22 03:49
2018/08/22 05:15