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

Sắp xếp lại và khử trùng lặp các cột SQL dựa trên dữ liệu cột

Bạn có thể chia nhỏ các số thành các hàng riêng lẻ bằng UNPIVOT, sau đó sắp xếp lại thứ tự chúng dựa trên sự xuất hiện của tiền tố '07' bằng ROW_NUMBER () và cuối cùng kết hợp lại nó bằng PIVOT để kết thúc bằng 6 Tel cột lại.

select *
  FROM
  (
    select CustomerID, Col, Tel
      FROM
      (
        select *, Col='Tel' + RIGHT(
               row_number() over (partition by CustomerID
                                  order by case
                                         when Tel like '07%' then 1
                                         else 2
                                         end),10)
         from phonenumbers
         UNPIVOT (Tel for Seq in (Tel1,Tel2,Tel3,Tel4,Tel5,Tel6)) seqs
      ) U
  ) P
  PIVOT (MAX(TEL) for Col IN (Tel1,Tel2,Tel3,Tel4,Tel5,Tel6)) V;

SQL Fiddle



  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 để so sánh 2 hàng từ cùng một bảng (SQL Server)?

  2. Làm thế nào để sử dụng JOIN thay vì UNION để đếm các hàng xóm của A HOẶC B?

  3. T-SQL:Làm thế nào để Chọn Giá trị trong Danh sách Giá trị KHÔNG CÓ TRONG Bảng?

  4. Tổng hợp kết nối trong .NET / SQL Server?

  5. Cách tạo Ràng buộc khóa ngoại trên nhiều cột trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 67