鉴于以下案例陈述的主体:
1 WHEN r.code= '00' then 'A1'
2 WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2' <
3 WHEN r.code ='0120' then 'A3'
4 WHEN r.code ='01' then 'A4' <
5 WHEN r.code ='1560' then 'A5'
6 WHEN r.code ='1530' then 'A6'
7 WHEN r.code ='1550' then 'A7'
我假设第2行总是在第4行之前执行?然后我阅读了诸如&#39; 之类的语句SQL是一种声明性语言,这意味着它告诉SQL引擎要做什么,而不是&#39;在
Order Of Execution of the SQL query
并想知道这是否也与CASE语句中的执行顺序有关。基本上,我可以保留上面的代码,而不必将第4行更改为
4 WHEN r.code ='01' AND r.source != 'PXWeb' then 'A4'
答案 0 :(得分:18)
返回的值将是匹配的最早THEN
子句(文本)的WHEN
表达式的值。这意味着如果符合第2行条件,结果将为A2
。
但是,如果您的THEN
表达式比文字值更复杂,那么即使不需要该表达式,评估这些表达式的一些工作也可能发生。
E.g。
WHEN r.code= '00' then 'A1'
WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2'
WHEN r.code ='0120' then 1/0
WHEN r.code ='01' then 'A4'
即使r.code
不等于0120
,也可以生成除零错误,即使它等于{{1比如说。我不知道标准在这个特定问题上有什么说法,但我知道某些产品也是如此。
答案 1 :(得分:3)
没关系:
&#34; CASE语句按顺序评估其条件,并在条件满足的第一个条件下停止。&#34;
答案 2 :(得分:2)
AFAIK,CASE
评估的顺序将是您在查询中指定的顺序。因此,在您的情况下,评估顺序为1,2,3,4 ... , 7
我可以保留上面的代码,而不必将第4行更改为
您可以更改第二个CASE
并添加一个ELSE
部分,如下所示,这将评估第4次CASE
评估,您可以完全删除第4次评估
2 WHEN r.code ='01' AND r.source = 'PXWeb' then 'A2' ELSE 'A4'