Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Пренареждане и дедупликиране на SQL колони въз основа на данни от колони

Можете да разделите числата на отделни редове с помощта на UNPIVOT, след това да ги пренаредите въз основа на появата на префикса '07' с помощта на ROW_NUMBER() и накрая да го комбинирате отново с помощта на PIVOT, за да завършите с 6 Tel колони отново.

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. Как да извърша търсене, чувствително към главни и малки букви, използвайки LIKE?

  2. PIVOT Заявка за множествено присъединяване

  3. Пълен текст Индекс стоп списък за персийски език

  4. Неправилен синтаксис близо до „LIMIT“ при използване на mssql

  5. Как да изброя наличните екземпляри на SQL сървъри, използващи SMO ​​в C#?