sql >> Databasteknik >  >> RDS >> Sqlserver

Ordna om och deduplicera SQL-kolumner baserat på kolumndata

Du kan dela upp siffrorna i individuella rader med UNPIVOT, sedan ordna om dem baserat på förekomsten av prefixet '07' med ROW_NUMBER(), och slutligen kombinera det igen med PIVOT för att sluta med 6 Tel kolumner igen.

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. Hur ersätter man icke-numeriska tecken i MySQL?

  2. Använda StringWriter för XML-serialisering

  3. mysql NULL-värde i var i CLAUSE

  4. Hur kan jag skicka sparad localStorage-webbdata till ett php-skript?