在同一语句中对案例使用案例结果似乎不起作用

Using Case result for case in same statement seems not to work

所以我才刚刚开始使用 case 语句。在没有第二种情况(状态)的情况下,我做到了这一点。在查询结果中,'VWD' 列中几乎总是有数字。现在我想根据第一个案例使用第二个案例。在这个网站上得到了它的代码。无论我做什么,列 'Status' 总是(空)。如果我在第二种情况下使用 else,它将始终使用 else 中的值。

我做错了什么?

SELECT f.fallid, f.fallaufndatum, f.fallentldatum, f.aufnahmeart, f.entlassart, fd.drg, k.ugvwd, k.mvwd, k.ogvwd,

    CASE
        WHEN f.fallentldatum IS NULL 
        THEN ROUND(sysdate - f.fallaufndatum, 0)
        ELSE f.fallentldatum - f.fallaufndatum
    END AS VWD,

    CASE 
        WHEN VWD = 16
        THEN 'Grün'
    END AS Status

FROM (
    SELECT CASE
        WHEN fallentldatum IS NULL 
        THEN ROUND(sysdate - fallaufndatum, 0)
        ELSE fallentldatum - fallaufndatum
    END AS VWD FROM tblfall),

tblfall f
JOIN tblfalldrginfo fd
ON f.fallid = fd.fallid
JOIN katdrg k
ON fd.drg = k.code
WHERE (sysdate - f.fallaufndatum) <= 1000
AND fd.drgkatalog = k.katalog;

提前感谢您的帮助!

您需要将其移动到子查询中。这可能是您正在寻找的:

SELECT  fallid, 
        fallaufndatum, 
        fallentldatum, 
        aufnahmeart,
        entlassart, 
        drg, 
        ugvwd,
        mvwd, 
        ogvwd,
        VWD,
        CASE 
            WHEN VWD = 16
            THEN 'Grün'
        END AS Status
FROM
(
    SELECT  f.fallid, 
            f.fallaufndatum, 
            f.fallentldatum, 
            f.aufnahmeart,
            f.entlassart, 
            fd.drg, 
            k.ugvwd,
            k.mvwd, 
            k.ogvwd,
            CASE
                WHEN f.fallentldatum IS NULL 
                THEN ROUND(sysdate - f.fallaufndatum, 0)
                ELSE f.fallentldatum - f.fallaufndatum
            END AS VWD
    FROM    tblfall         f
    JOIN    tblfalldrginfo  fd  ON  f.fallid = fd.fallid
    JOIN    katdrg          k   ON  fd.drg = k.code
                                AND fd.drgkatalog = k.katalog
    WHERE   (sysdate - f.fallaufndatum) <= 1000
) As X

问题是您的查询不知道字段名称,因为所有字段都是同时创建的。所以你的第二种情况不识别 VWD。

您可以将 Siyual 选项与子查询一起使用或重复大小写。

CASE
    WHEN f.fallentldatum IS NULL 
    THEN ROUND(sysdate - f.fallaufndatum, 0)
    ELSE f.fallentldatum - f.fallaufndatum
END AS VWD,

CASE 
    WHEN ( CASE
               WHEN f.fallentldatum IS NULL 
               THEN ROUND(sysdate - f.fallaufndatum, 0)
               ELSE f.fallentldatum - f.fallaufndatum
          END )= 16
    THEN 'Grün'
END AS Status