つまり、ジレンマとして、T_GROUPというOracleテーブルがあります。テーブル内のレコードには一意のID(ID)があり、それらはSTUDY_IDで識別されるスタディの一部であるため、複数のグループを同じスタディに含めることができます。
CREATE TABLE T_GROUP
(
"ID" NUMBER(10,0),
"GROUP_NAME" VARCHAR2(255 CHAR),
"STUDY_ID" NUMBER(10,0)
)
既存のテーブルには数百のレコードがあり、GROUP_INDEXという新しい列を追加します。
ALTER TABLE T_GROUP ADD (
GROUP_INDEX NUMBER(10,0) DEFAULT(0)
);
列を追加した後、スクリプトを実行してGROUP_INDEXフィールドを更新する必要があります。このフィールドは1から始まり、スタディ内のグループごとに最小のIDから1ずつ増加する必要があります。
これで、次のようなデータが得られました。
ID GROUP_NAME STUDY_ID GROUP_INDEX
-------------------------------------------
1 Group 1 3 0
2 Group 2 3 0
3 My Group 5 0
4 Big Group 5 0
5 Group X 5 0
6 Group Z 6 0
7 Best Group 6 0
更新後、group_indexフィールドは次のようになります。
ID GROUP_NAME STUDY_ID GROUP_INDEX
-------------------------------------------
1 Group 1 3 1
2 Group 2 3 2
3 My Group 5 1
4 Big Group 5 2
5 Group X 5 3
6 Group Z 6 1
7 Best Group 6 2
更新は、バッチファイルを介してsqlplusから実行されます。group byクエリとsubクエリを試してみましたが、運が悪く、sqlplusを使用したことがないので、変数やカーソルなどを使用できるかどうかわかりません。すべてのヒントに感謝します。