gpt4 book ai didi

sql - Oracle SQL - CASE WHEN THEN ELSE 忽略 ELSE 部分

转载 作者:行者123 更新时间:2023-12-04 17:55:56 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com