在同一语句中对案例使用案例结果似乎不起作用
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
所以我才刚刚开始使用 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