【发布时间】:2021-05-12 16:19:38
【问题描述】:
我尝试在 CASE THEN 中使用子查询,如下所示。(我在 ORACLE 中写下了代码)
WITH SAMPLE AS (
SELECT 1 AS VALUE_,
'20191230' AS DATE_
FROM DUAL
UNION
SELECT 2 AS VALUE_,
'20201230' AS DATE_
FROM DUAL)
SELECT VALUE_,
DATE_,
CASE
WHEN TO_CHAR(ADD_MONTHS(DATE, -12), 'YYYYMMDD') IN (SELECT DATE_ FROM SAMPLE)
THEN (SELECT VALUE_ FROM SAMPLE WHERE DATE_ = TO_CHAR(ADD_MONTHS(DATE, -12),
'YYYYMMDD'))
ELSE NULL
END AS ONE_YEAR_AGO_VALUE_
FROM SAMPLE;
我希望得到一个新列 (ONE_YEAR_AGO_VALUE_),第一行为 NULL,第二行为 1。
但是,结果与我预期的不同。
结果有一个“ONE_YEAR_AGO_VALUE_”,第一行为 NULL,第二行为 NULL。
我想让第二行有 1 个。
如果您让我知道我的代码中的错误之处,我真的很感激。
谢谢。
【问题讨论】:
-
您的代码在很多方面都没有意义。例如,当
DATE_是字符串时,您将其视为日期。
标签: sql database oracle subquery