値が実際にNULLで空白でない場合は、以下が機能するはずです。
select id,
concat_ws('||', Phone1, Phone2, Phone3)
from t
参照は
注文を処理するには、次のようにします。
select id,
group_concat(phone Separator '||' order by phone) as ConcatPhones
from (select t.id,
(case when nums.n = 1 then phone1
when nums.n = 2 then phone2
when nums.n = 3 then phone3
end) as phone
from t cross join
(select 1 as n union all select 2 union all select 3) nums
) p
where phone is not null
group by id
これにより、電話番号を持たないIDが除外されます。
巨大なcase
を使用してこれを行うこともできます ステートメント、それは悪夢のようなもののようですが:
select t.id,
(case when phone1 < phone2 and phone2 < phone3 then concat_ws('||', phone1, phone2, phone3)
when phone1 < phone3 and phone3 < phone2 then concat_ws('||', phone1, phone3, phone2)
. . . through the remaining 4 permuatiations when all three are present
when phone1 is null and phone2 < phone3 then concat_ws('||', phone2, phone3)
. . . through the remaining 5 permutuations when one is NULL
when phone1 is null and phone2 is null then phone3
. . . through the remaining 2 permutations when two are NULL
end) as ConcatPhones
from t
これはより効率的です。 3つの電話番号で実行可能です。たとえば、5つは扱いたくありません。