我编写的sql创建了4列:Tier0
,Tier1
,Tier2
和Weight
。
重量与等级相关联
当Tier0 ='X'时,权重= 0,
当Tier1 ='X'时,重量= 0.7,和
当Tier2 ='X'时,权重= 1。
现在我的SELECT语句的这部分代码是
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) > (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier0,
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) = (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier1,
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) < (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier2,
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) > (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 0
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) = (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 0.7
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) < (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 1
END AS Weight
有没有办法在前三个案例陈述中包含最后的长案例?
如果可能的话,我想为每个层都有一个case语句,它们都将X放在正确的层列中,并且还正确地更新了权重列。
任何帮助都将不胜感激。
答案 0 :(得分:4)
您可以使用派生表:
SELECT Tier0,
Tier1,
Tier2,
CASE
WHEN Tier0 = 'X' THEN 0
WHEN Tier1 = 'X' THEN 0.7
WHEN Tier2 = 'X' THEN 1
END [Weight]
FROM (Your current query here) AS T;
或CTE:
;WITH CTE AS
(
Your current query here
)
SELECT Tier0,
Tier1,
Tier2,
CASE
WHEN Tier0 = 'X' THEN 0
WHEN Tier1 = 'X' THEN 0.7
WHEN Tier2 = 'X' THEN 1
END [Weight]
FROM CTE;
答案 1 :(得分:1)
这是怎么回事?
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) > (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 0
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) = (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 0.7
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) < (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 1
END AS Weight
答案 2 :(得分:0)
您可以计算CTE中的Tier0
,Tier1
,Tier2
列,然后使用它来计算Weight
列:
with cte as (
select
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) > (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier0,
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) = (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier1,
CASE
WHEN (SUM(vst.len_of_stay) / COUNT(vst.len_of_stay)) < (SUM(drg.drg_std_days_stay) / COUNT(drg.drg_std_days_stay))
THEN 'X' Else '' END AS Tier2
FROM ...)
SELECT Tier0, Tier1, Tier2,
case when Tier0 = 'X' then 0
when Tier1 = 'X' then 0.7
when Tier2 = 'X' then 1
end as weight
from cte
至少这有助于复制逻辑。