2013-12-12 67 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說話可能適用於文本,但它不適用於堆棧溢出。提交答案時請小心,以便您的答案能夠被完全理解。 –

相關問題