条件完成后结束CASE声明

时间:2017-10-05 10:44:11

标签: sql sql-server sql-server-2016

假设有一些电话号码连接到人,这些电话号码都有索引。

  1. 我需要先选择一个索引为16389的数字。
  2. 如果先前不存在或为空,我需要选择一个索引为16385的数字。
  3. 如果之前也不存在,我需要选择一个与某个公司相关的号码(这里的索引并不重要)。
  4. 限制是,只显示其中一个数字 - 所以,如果有一个16389索引的数字,只有它应该显示,即使有一个16385索引号或公司号。 CASE声明不起作用(或者我可以根据需要构建它)。

    这是我想到的例子(不工作):

    (CASE 
        WHEN pho.ptype_idx = 16389 THEN pho.phone END
        ELSE WHEN pho.ptype_idx = 16385 THEN pho.phone END
        ELSE pho1.phone (this is the company phone number)
     END) as 'column1'
    

    问题是,如何在条件成立后强制CASE结束?因为现在它返回重复的行,只有电话号码改变了。或者也许另一种方法会更好?我使用的是SQL Server 2016。

1 个答案:

答案 0 :(得分:2)

case表达式不会生成其他行。你问题的那部分并没有多大意义。

您的case在语法上不正确。正确的表述是:

(CASE WHEN pho.ptype_idx = 16389 THEN pho.phone
      WHEN pho.ptype_idx = 16385 THEN pho.phone
      ELSE pho1.phone (this is the company phone number)
 END) as column1 

至少,这在语法上是正确的,所以它至少应该起作用。它也可以解决你的问题。

这可以更简单地写成:

(CASE WHEN pho.ptype_idx IN (16389, 16385) THEN pho.phone
      ELSE pho1.phone (this is the company phone number)
 END) as column1