这是一件看似简单的事情,但我找不到任何参考。如果另一个字段的值为null,我想在我的select语句中添加一个自定义字段。在下面我想创建一个名为'IMPACT'的字段,如果子查询中的LOCATION_ACCOUNT_ID字段为空,则显示值'Y'。我该怎么做?
SELECT FIRST_NAME,LAST_NAME,ULTIMATE_PARENT_NAME, IMPACT = IF LOCATION_ACCOUNT_ID IS NULL THEN 'Y' ELSE ''
FROM (SELECT DISTINCT A.FIRST_NAME,
A.LAST_NAME,
B.LOCATION_ACCOUNT_ID,
A.ULTIMATE_PARENT_NAME
FROM ACTIVE_ACCOUNTS A,
QL_ASSETS B
WHERE A.ACCOUNT_ID = B.LOCATION_ACCOUNT_ID(+)
答案 0 :(得分:4)
使用CASE
代替IF
:
SELECT
FIRST_NAME,
LAST_NAME,
ULTIMATE_PARENT_NAME,
CASE WHEN LOCATION_ACCOUNT_ID IS NULL THEN 'Y' ELSE '' END AS IMPACT
FROM (
SELECT DISTINCT
A.FIRST_NAME,
A.LAST_NAME,
B.LOCATION_ACCOUNT_ID,
A.ULTIMATE_PARENT_NAME
FROM ACTIVE_ACCOUNTS A,
QL_ASSETS B
WHERE A.ACCOUNT_ID = B.LOCATION_ACCOUNT_ID(+)
你也应该使用LEFT JOIN语法而不是旧的(+)语法(但在这种情况下更多的是样式选择 - 它不会改变结果):
SELECT
FIRST_NAME,
LAST_NAME,
ULTIMATE_PARENT_NAME,
CASE WHEN LOCATION_ACCOUNT_ID IS NULL THEN 'Y' ELSE '' END AS IMPACT
FROM (
SELECT DISTINCT
A.FIRST_NAME,
A.LAST_NAME,
B.LOCATION_ACCOUNT_ID,
A.ULTIMATE_PARENT_NAME
FROM ACTIVE_ACCOUNTS A
LEFT JOIN QL_ASSETS B
ON A.ACCOUNT_ID = B.LOCATION_ACCOUNT_ID
)
事实上,由于您不是使用结果中B
的任何列(仅检查存在),您只需使用{ {1}}:
EXISTS
答案 1 :(得分:2)
使用case声明:
SELECT FIRST_NAME,
LAST_NAME,
ULTIMATE_PARENT_NAME,
CASE WHEN Location_Account_ID IS NULL THEN 'Y' ELSE '' END AS IMPACT
FROM (
SELECT DISTINCT A.FIRST_NAME,
A.LAST_NAME,
B.LOCATION_ACCOUNT_ID,
A.ULTIMATE_PARENT_NAME
FROM ACTIVE_ACCOUNTS A,
QL_ASSETS B
WHERE A.ACCOUNT_ID = B.LOCATION_ACCOUNT_ID(+)
) a
P.S。还为派生表添加了别名,因此您不会收到错误。
答案 2 :(得分:-2)
根据您的以下陈述,我并没有完全得到您的要求
(如果中的LOCATION_ACCOUNT_ID字段显示值'Y' 子查询为空)
我可以建议您使用表达式。
将此语句放在表达式之间。
NVL(B.LOCATION_ACCOUNT_ID,'Y') IMPACT