我从两个不同的列中选择数据,具体取决于它的记录类型。
使用Case语句我检查它是什么类型的记录,并选择要插入的相应列。
但是,使用CAST的语法不正确,在检查Oracle文档后,没有理由说它不起作用。
CREATE TABLE TEST123 AS
SELECT DISTINCT
bill.ROW_ID,
bill.ACCNT_TYPE_CD,
CASE
WHEN bill.ACCNT_TYPE_CD = 'TestAccount'
THEN CAST(TO_CHAR(bill.INTEGRATION_ID) AS VARCHAR2(30)) AS NUM
ELSE CAST(TO_CHAR(bill.OU_NUM )AS VARCHAR2(30)) AS NUM
END
FROM SIEBEL.S_ORG_EXT bill
INNER JOIN Products prod
ON prod.BILL_ACCNT_ID = bill.ROW_ID
OR prod.CUST_ACCNT_ID = bill.ROW_ID;
错误代码是:
ORA-00905:缺少关键字 00905. 00000 - "缺少关键字"
答案 0 :(得分:4)
AS NUM
必须遵循END
的{{1}}。如果可以单独为每个条件设置列名,则该列可以有两个不同的名称。显然,这无法奏效。
CASE
此外,同时使用CASE
WHEN bill.ACCNT_TYPE_CD = 'TestAccount'
THEN CAST(TO_CHAR(bill.INTEGRATION_ID) AS VARCHAR2(30))
ELSE CAST(TO_CHAR(bill.OU_NUM )AS VARCHAR2(30))
END AS NUM
和TO_CHAR
也是多余的。它们都是将非字符串转换为字符串的方式。
答案 1 :(得分:3)
由于CASE .. END
是一个函数,你可以比 Allan 所解释的更进一步:
SELECT DISTINCT ...
CAST(
CASE WHEN bill.ACCNT_TYPE_CD = 'TestAccount'
THEN bill.INTEGRATION_ID
ELSE bill.OU_NUM
END
AS VARCHAR(30) -- `AS` here is part of the `CAST` function
-- and will denote the requested data type
) AS NUM -- `AS` here introduces the column alias
如果您不熟悉CAST
功能,请注意此处AS
关键字的双重含义。请参阅上面代码中的注释