我如何在 CASE THEN 中使用子查询?
how can I use subquery in CASE THEN?
我尝试在 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。
如果您让我知道我的代码中有什么错误,我将不胜感激。
谢谢。
当我修复您的查询以正确使用日期时,它会生成一行 NULL
和一行 1
:
WITH SAMPLE AS (
SELECT 1 AS VALUE_, DATE '2019-12-30' AS DATE_
FROM DUAL
UNION ALL
SELECT 2 AS VALUE_, DATE '2020-12-30' AS DATE_
FROM DUAL
)
SELECT S.VALUE_, S.DATE_,
(CASE WHEN ADD_MONTHS(S.DATE_, -12) IN (SELECT S2.DATE_ FROM SAMPLE S2)
THEN (SELECT S2.VALUE_ FROM SAMPLE S2 WHERE S2.DATE_ = ADD_MONTHS(S.DATE_, -12))
END) AS ONE_YEAR_AGO_VALUE_
FROM SAMPLE S;
你的代码也太复杂了。您不需要 CASE
表达式,您可以直接将其用于值。 Here 是一个 db<>fiddle.
我尝试在 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。
如果您让我知道我的代码中有什么错误,我将不胜感激。
谢谢。
当我修复您的查询以正确使用日期时,它会生成一行 NULL
和一行 1
:
WITH SAMPLE AS (
SELECT 1 AS VALUE_, DATE '2019-12-30' AS DATE_
FROM DUAL
UNION ALL
SELECT 2 AS VALUE_, DATE '2020-12-30' AS DATE_
FROM DUAL
)
SELECT S.VALUE_, S.DATE_,
(CASE WHEN ADD_MONTHS(S.DATE_, -12) IN (SELECT S2.DATE_ FROM SAMPLE S2)
THEN (SELECT S2.VALUE_ FROM SAMPLE S2 WHERE S2.DATE_ = ADD_MONTHS(S.DATE_, -12))
END) AS ONE_YEAR_AGO_VALUE_
FROM SAMPLE S;
你的代码也太复杂了。您不需要 CASE
表达式,您可以直接将其用于值。 Here 是一个 db<>fiddle.