1

我正在使用 Oracle 11G 并有 2 个名为 RES 和 TES 的源数据表,我使用它们根据数据规则规范为“CREATED”列创建新值。

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 中有某个字符串或者某些值为空,我正在尝试根据上述规则为上述某些列创建新的数据值。主键是两个表之间的 NUMBER。当我运行此选择时,在 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                  

我的问题是我只想获得第一个 case 语句要求的值,而不是为单个测试的“创建”列获得多行。任何帮助将不胜感激。抱歉,示例数据有点混乱,但我需要 10 分才能发布屏幕截图。

4

1 回答 1

0

如果number是两个表之间的链接,则需要使用显式JOIN或至少一个WHERE子句。如果没有它们中的任何一个,您将创建一个笛卡尔 Join

WHERE res.number = tes.number在您的声明底部添加

于 2013-03-05T22:23:10.193 回答