斯文的紫菜汤 · js一个多层嵌套对象往另一个多层嵌套对象添加 ...· 昨天 · |
怕老婆的针织衫 · dos for循环嵌套 ...· 2 周前 · |
绅士的啤酒 · Sass和Less(预处理器)「建议收藏」- ...· 3 周前 · |
威武的茴香 · post-css/less/sass样式嵌套 ...· 3 周前 · |
发呆的抽屉 · uniapp样式嵌套写法 - CSDN文库· 3 周前 · |
讲道义的柳树 · 阿里大文娱集团与西安市委宣传部签署战略合作协 ...· 2 周前 · |
玩滑板的小虾米 · 专访丨周深:别夸我,我怕尴尬_有戏_澎湃新闻 ...· 1 年前 · |
低调的枇杷 · 徐文兵为什么不被中医界认可_抖抖音· 1 年前 · |
直爽的烤红薯 · 章莹颖亲友呼吁更多筹款 有人理解有人反感-中青在线· 1 年前 · |
气势凌人的太阳 · 怎样看待围绕“眯眯眼”的争议 ...· 1 年前 · |
我正在编写一个SQL查询,其中返回的一些列需要根据相当多的条件进行计算。
我目前使用的是嵌套的case语句,但它变得越来越混乱。有没有更好的(更有条理和/或更具可读性的)方法?
(我使用的是Microsoft SQL Server,2005)
一个简化的例子:
SELECT
col1,
col2,
col3,
WHEN condition
WHEN condition1
WHEN condition2
THEN calculation1
ELSE calculation2
WHEN condition2
THEN calculation3
ELSE calculation4
WHEN condition1
WHEN condition2
THEN calculation5
ELSE calculation6
WHEN condition2
THEN calculation7
ELSE calculation8
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
用户定义的函数可能会更好地服务,至少可以隐藏逻辑- esp。如果需要在多个查询中执行此操作
我个人就是这样做的,限制了嵌入的CASE表达式。我还会添加注释来解释正在发生的事情。如果它太复杂了,就把它分解成函数。
SELECT
col1,
col2,
col3,
CASE WHEN condition THEN
CASE WHEN condition1 THEN
CASE WHEN condition2 THEN calculation1
ELSE calculation2 END
CASE WHEN condition2 THEN calculation3
ELSE calculation4 END
ELSE CASE WHEN condition1 THEN
CASE WHEN condition2 THEN calculation5
ELSE calculation6 END
ELSE CASE WHEN condition2 THEN calculation7
ELSE calculation8 END
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
下面是嵌套的“复杂”case语句的简单解决方案:--嵌套的Case复杂表达式
select datediff(dd,Invdate,'2009/01/31')+1 as DaysOld,
case when datediff(dd,Invdate,'2009/01/31')+1 >150 then 6 else
case when datediff(dd,Invdate,'2009/01/31')+1 >120 then 5 else
case when datediff(dd,Invdate,'2009/01/31')+1 >90 then 4 else
case when datediff(dd,Invdate,'2009/01/31')+1 >60 then 3 else
case when datediff(dd,Invdate,'2009/01/31')+1 >30 then 2 else
case when datediff(dd,Invdate,'2009/01/31')+1 >30 then 1 end
end as Bucket
from rm20090131atb
只需确保每个case语句都有一个end语句
把所有的箱子都包起来。
SELECT
col1,
col2,
col3,
WHEN condition1 THEN calculation1
WHEN condition2 THEN calculation2
WHEN condition3 THEN calculation3
WHEN condition4 THEN calculation4
WHEN condition5 THEN calculation5
ELSE NULL
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
您可以组合多个条件来避免这种情况:
CASE WHEN condition1 = true AND condition2 = true THEN calculation1
WHEN condition1 = true AND condition2 = false
ELSE 'what so ever' END,
我们可以将多个条件组合在一起,以减少性能开销。
假设有三个变量a,b,c,我们想要对它们进行计算。我们可以这样做:
CASE WHEN a = 1 AND b = 1 AND c = 1 THEN '1'
WHEN a = 0 AND b = 0 AND c = 1 THEN '0'
ELSE '0' END,
发呆的抽屉 · uniapp样式嵌套写法 - CSDN文库 3 周前 |
低调的枇杷 · 徐文兵为什么不被中医界认可_抖抖音 1 年前 |
直爽的烤红薯 · 章莹颖亲友呼吁更多筹款 有人理解有人反感-中青在线 1 年前 |