Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zamów przed CONCAT_WS

Poniższe powinno działać, jeśli wartości rzeczywiście są NULL i nie są puste:

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

Odniesienie jest tutaj :

Aby obsłużyć zamówienie, wybrałbym:

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

Spowoduje to odfiltrowanie każdego identyfikatora, który nie ma numeru telefonu.

Możesz to również zrobić za pomocą ogromnego case oświadczenie, chociaż wydaje się to koszmarem:

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

To jest bardziej wydajne. Jest to możliwe dla 3 numerów telefonów. Nie chciałbym mieć do czynienia, powiedzmy, z pięcioma z nich.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uzyskać sumę za limit w mysql przy użyciu tego samego zapytania?

  2. Redystrybuuj głosy, eliminując kandydatów

  3. MySQL GROUP BY dwie kolumny

  4. Matlab i MySQL nie znaleziono odpowiedniego sterownika

  5. Jak używać odpowiedzi z żądania Jmeter JDBC w żądaniu HTTP?