需要将三列压缩成一列,从三个

时间:2017-10-04 16:27:31

标签: sql

我有三列。每列可以为空,具有从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 个答案:

答案 0 :(得分: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%')