は、私は私のSQLクエリに問題があり、それを解決する方法を知らない:のOracle SQL - CASE 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_NEWはオプションのフィールドであるのに対しLP_BASICカラムは常に満たされています。 CURRENT_LPは常にを表示する必要があります。LP_NEW(空でない場合)else LP_BASIC(これは決して空ではありません)。
"ELSE f.LP_BASIC" -Partが機能しないという問題があります。 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
助けが必要です。
ありがとうございます。
Rob。
UPDATE(解決)
LP_NEW列が単一の空白文字は、それにあった、nullではなかったので、 "NULL IS" は動作しませんでした。
いくつかのサンプルデータを、必要な結果とあなたのクエリ – Aleksej
からなっているものは、これは読みはるかに簡単ではないでしょうを投稿してください? 'coalesce(f.LP_NEW、f.LP_BASIC)' – Kritner
@Kritner 'Coalesce'が優れています。 'Nvl'は両方の値を比較し、値が見つかるとすぐに'合体 'が止まります。 – JohnHC