1

私は 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 が必要です。

4

1 に答える 1

0

2 つのテーブル間のリンクである場合は、明示的な句または少なくとも句numberを使用する必要があります。どちらも使用しないと、Cartesian Joinが作成されます。JOINWHERE

WHERE res.number = tes.numberステートメントの最後に追加

于 2013-03-05T22:23:10.193 に答える