我的 sql 查询有问题,不知道如何解决:
输出表包括。
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 (如果不为空) else 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
任何帮助表示赞赏。
先感谢您。
抢。
更新 (解决了)
LP_NEW 列不为空,其中只有一个空格字符,因此“IS NULL”不起作用。
最佳答案
(这对于评论来说太长了,因此作为答案发布)
正如评论中已经提到的,您的 CASE
声明完全没问题;您应该重新检查您的输入数据。
使用虚假数据证明您的方法正确性的示例:
with v_input(serialnr, lp_basic, lp_new) as (
select
level,
'basic_' || to_char(level),
(case when mod(level, 2) = 0 then 'new_' || to_char(level) else null end)
from dual
connect by level <= 10)
SELECT
f.SERIALNR,
f.LP_BASIC,
f.LP_NEW,
CASE
WHEN
f.LP_NEW
IS NOT NULL
THEN
f.LP_NEW
ELSE
f.LP_BASIC
END
AS CURRENT_LP
FROM v_input f
关于sql - Oracle SQL - CASE WHEN THEN ELSE 忽略 ELSE 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40382704/