我有我的SQL查詢問題,不知道如何解決這個問題:的Oracle SQL - CASE WHEN THEN ELSE忽略ELSE部分
輸出表組成。
1. SERIALNR VARCHAR(26) NOT NULL
2. LP_BASIC VARCHAR(20) NOT NULL
3. LP_NEW VARCHAR(20)
4. SCORE NUMBER(20) NOT NULL
5. CURRENT_LP VARCHAR(20)
該查詢本身運行良好,並且不包含錯誤。
的LP_BASIC柱總是充滿而LP_NEW是一個可選字段。 CURRENT_LP應始終顯示LP_NEW(如果不是空的)其他LP_BASIC(它永遠不會爲空)。
問題是,「ELSE f.LP_BASIC」 - 部分不起作用。 它應該返回LP_BASIC值,如果沒有LP_NEW記錄被發現,而是它只返回一個空場。
SELECT
f.SERIALNR,
f.LP_BASIC,
f.LP_NEW,
f.SCORE,
CASE
WHEN
f.LP_NEW
IS NOT NULL
THEN
f.LP_NEW
ELSE
f.LP_BASIC
END
AS CURRENT_LP
FROM (
SELECT
SERIALNR,
MAX(SCORE) MAX_ID
FROM
EAPS.PS_TC_SM
GROUP BY
SERIALNR
) x
INNER JOIN
EAPS.PS_TC_SM f
ON
f.SERIALNR=
x.SERIALNR
AND
f.SCORE =
x.MAX_ID
任何幫助apreciated。
預先感謝您。
Rob。
UPDATE(解決)
的LP_NEW列是不爲空,這又有一個空格字符,所以 「IS NULL」 沒有工作。
請張貼一些示例數據,需要的結果和你正在從查詢 – Aleksej
越來越這是不是可以更簡單閱讀? 'coalesce(f.LP_NEW,f.LP_BASIC)' – Kritner
@Kritner'Coalesce'更好。 'Nvl'對兩個值進行比較,只要找到一個值,'coalesce'就會停止。 – JohnHC