私は Oracle 11G を使用しており、データ ルールの仕様に応じて「CREATED」列の新しい値を作成するために使用する RES と TES という 2 つのソース データ テーブルがあります。
Tables:RES
Number
entry
name
by
TES
Number
Completed
Machine
On
SELECT DISTINCT RES.TES_NUMBER,
RES.NAME,
RES.ENTRY,
CASE
WHEN REGEXP_LIKE(RES.NAME,'Created By','i') AND RES.ENTRY IS NOT NULL THEN RES.ENTRY
WHEN NOT REGEXP_LIKE(RES.NAME,'Created By','i') AND RES.BY IS NOT NULL THEN RES.BY
END AS CREATED_BY,
CASE
WHEN REGEXP_LIKE(RES.NAME,'Created Date','i') THEN RES.ENTRY
ELSE TO_CHAR(TES.ON)
END AS CREATED_DATE,
CASE
WHEN TES.Machine IS NOT NULL THEN TES.Machine
WHEN REGEXP_LIKE(RESULT.NAME,'Machine|Manual G/H','i') THEN RES.ENTRY
END CREATED_MACHINE_ID
FROM RES, TES
WHERE RES.NUMBER = TES.NUMBER;
NAMEに特定の文字列が含まれている場合、または特定の値がnullの場合、上記のルールに応じて、上記の列のいくつかに新しいデータ値を作成しようとしています。主キーは、2 つのテーブル間の NUMBER です。この select を実行すると、case ステートメントで問題なく新しい値が作成されますが、NUMBER には複数のエントリが存在する可能性があるため、重複が作成される可能性があります。クエリのサンプル データを次に示します。
NUMBER NAME BY CREATED_BY ON CREATED_DATE MACHINE CREATED_MACHINE_ID ENTRY
458920 Machine JONS1 JONS1 13-Apr-11 13-Apr-11 B30ST5 B30ST5
458920 Created By MARY DOE 13-Apr-11 13-Apr-11 MARY DOE
458920 Calc BEN90 BEN90 13-Apr-11 13-Apr-11 0
458920 Created Date TWING2 TWING2 13-Apr-11 8/2/2010 8/2/2010
458920 EquipName TWING2 TWING2 13-Apr-11 13-Apr-11 DELTA 45
458920 Calc DANNY3S DANNY3S 13-Apr-11 13-Apr-11 98
DESIRED DATA
NUMBER CREATED_BY CREATED_DATE CREATED_MACHINE_ID
458920 MARY DOE 8/2/2010 B30ST5
私の問題は、ヒットした最初のケースステートメント要件の値のみを取得したいということです。代わりに、単一のテストで「CREATED」列の複数の行を取得します。どんな助けでも大歓迎です。サンプル データが乱雑で申し訳ありませんが、スクリーンショットを投稿するには評価 10 が必要です。