在同一语句中使用Case结果似乎不起作用

时间:2015-12-02 14:21:03

标签: sql subquery case

所以我刚开始处理案例陈述。没有第二种情况(状态),我得到了完美的工作。在查询结果中,“VWD”列中几乎总是有数字。现在我想根据第一种情况使用第二种情况。在这个网站上得到了它的代码。无论我做什么,“状态”列始终为(null)。如果我对第二种情况使用else,它将始终使用else中的值。

我做错了什么?

Card

先谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您需要将其移动到子查询中。这可能就是你要找的东西:

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

答案 1 :(得分:0)

问题是您的查询不知道字段名称,因为所有字段都是同时创建的。所以你的第二个案例不承认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