2017-10-04 38 views
0

我有三列。每列可以为空,有一个电话号码开始01或电话号码开始07.我想确定哪一列有一个07号码,并显示在一个单一列的结果。如果没有以07开头的列,我想跳过该记录。需要将三列浓缩为一个从三个列表中选择一个特定数字

我一直想这一点,但不能得到它,选择第3列: -

SELECT ID_no, tel_no1, tel_no2, tel_no3, 
coalesce(
    CASE WHEN (tel_no1 like '01%' or tel_no1 = null) THEN tel_no2 ELSE NULL END, 
    CASE WHEN (tel_no2 like '01%' or tel_no2 = null) THEN tel_no3 ELSE NULL END) 

from Table where ID_no = 50032 
+1

标记您的问题与您正在使用的数据库。 –

+2

'tel_no1 = null' [IS NULL和= NULL之间是否有区别](https://stackoverflow.com/questions/3777230/is-there-any-difference-between-is-null-and-null) – lad2025

回答

0

我觉得这是一个基本的case一些where条件。大多数数据库支持left()。否则substr()/substring()作品为where条件:

select t.*, 
     (case when tel_no1 like '07%' then tel_no1 
      when tel_no2 like '07%' then tel_no2 
      when tel_no3 like '07%' then tel_no3 
     end) as telno_07 
from t 
where id_no = 50032 and 
     '07' in (left(tel_no1, 2), left(telno2, 2), left(telno3, 2)); 

这将返回第一个匹配的 “07” 号。

或者,更标准的where条件是:

where . . . and 
     (tel_no1 like '07%' or tel_no2 like '07%' or tel_no3 like '07%') 
+0

谢谢@Gordon Linoff,那是做的。似乎我让它太复杂了。 –

相关问题