2013-12-12 66 views
1

这是一个看似简单的事情,但我找不到任何参考。如果另一个字段的值为空,我想将自定义字段添加到我的select语句中。在下面,我想创建一个名为'IMPACT'的字段,如果子查询中的LOCATION_ACCOUNT_ID字段为空,则显示值'Y'。我该怎么做呢?如果其他字段为空,则在SELECT中创建自定义字段

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(+) 

回答

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在结果(只检查是否存在),你可以只使用EXISTS

SELECT 
    FIRST_NAME, 
    LAST_NAME, 
    ULTIMATE_PARENT_NAME, 
    CASE WHEN EXISTS(SELECT NULL 
        FROM QL_ASSETS 
        WHERE LOCATION_ACCOUNT_ID = A.ACCOUNT_ID) 
     THEN 'Y' 
     ELSE '' 
     END AS IMPACT 
    FROM ACTIVE_ACCOUNTS A 
+0

谢谢斯坦利! – StephenT

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 

附:还为你的派生表添加了一个别名,所以你不会得到一个错误。

-2

我并没有完全得到基于您下面的语句你问什么

(显示“Y”的值,如果在 子查询的LOCATION_ACCOUNT_ID字段为空)

我可以建议你使用一个表达式。

把这句话放在你的表情之间。

NVL(B.LOCATION_ACCOUNT_ID,'Y') IMPACT

+2

我为您的答案提交了一个编辑,以便它可读。虽然TXT说话可能适用于文本,但它不适用于堆栈溢出。提交答案时请小心,以便您的答案能够被完全理解。 –

相关问题