我正在使用 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 分才能发布屏幕截图。