sql >> Databáze >  >> RDS >> Mysql

Objednejte do CONCAT_WS

Následující by mělo fungovat, pokud jsou hodnoty skutečně NULL a nejsou prázdné:

select id,
       concat_ws('||', Phone1, Phone2, Phone3)
from t

Odkaz je zde :

Abych vyřídil objednávku, šel bych do:

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

Tím se odfiltruje každé ID, které nemá telefonní číslo.

Můžete to udělat také pomocí obřího case prohlášení, i když to vypadá jako noční můra:

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

Toto je efektivnější. Je to možné pro 3 telefonní čísla. Nechtěl bych se zabývat, řekněme, pěti z nich.




  1. Přidat vypočítaný sloupec do existující tabulky na serveru SQL Server

  2. MySQL, json, JSON_ARRAY_APPEND – proč nebude připojení fungovat na 5.7.13?

  3. CakePHP Databázové připojení Mysql chybí nebo se nepodařilo vytvořit

  4. SQLException:Nebyl nalezen žádný vhodný ovladač