Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đặt hàng trước CONCAT_WS

Điều sau sẽ hoạt động, nếu các giá trị thực sự là NULL và không trống:

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

Tham chiếu là tại đây :

Để xử lý việc đặt hàng, tôi sẽ:

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

Thao tác này sẽ lọc ra bất kỳ id nào không có số điện thoại.

Bạn cũng có thể làm điều này với một case khổng lồ tuyên bố, mặc dù điều đó có vẻ như là một cơn ác mộng:

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

Điều này hiệu quả hơn. Nó là khả thi cho 3 số điện thoại. Tôi sẽ không muốn đối phó với, chẳng hạn như năm người trong số họ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thêm nhận xét trong MySQL?

  2. Lỗi biên dịch:Hàm hoặc biến được mong đợi trong VBA để truy cập

  3. flake8 phàn nàn về so sánh boolean ==trong mệnh đề bộ lọc

  4. MYSQL chọn những người bạn chung

  5. MySQL cập nhật một trường với một biến tăng dần