निम्नलिखित कार्य करना चाहिए, यदि मान वास्तव में 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
यह किसी भी आईडी को फ़िल्टर कर देगा जिसमें फ़ोन नंबर नहीं है।
आप इसे एक विशाल 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 फोन नंबरों के लिए संभव है। मैं उनमें से पांच के साथ सौदा नहीं करना चाहता।