sql >> Databáze >  >> RDS >> Sqlserver

Přeuspořádání a deduplikace SQL sloupců na základě dat sloupců

Čísla můžete rozdělit do jednotlivých řádků pomocí UNPIVOT, poté je změnit pořadí na základě výskytu předpony '07' pomocí ROW_NUMBER() a nakonec je znovu zkombinovat pomocí PIVOT, abyste skončili s 6 Tel znovu sloupce.

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. mysql - Dynamický alias sloupce

  2. Jak přidat Failover Partner do připojovacího řetězce ve VB.NET

  3. Mysql - najít tabulku v celé databázi

  4. Indexy tabulky pro sloupce pole Text[]