sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server - PIVOT - to kolonner i rækker

Der er et par forskellige måder, hvorpå du kan få det resultat, du ønsker. Svarer til @Sheela K R's svar du kan bruge en aggregeret funktion med et CASE-udtryk, men det kan skrives på en mere kortfattet måde:

select 
  max(case when rowid = 1 then first end) First1,
  max(case when rowid = 1 then last end) Last1,
  max(case when rowid = 2 then first end) First2,
  max(case when rowid = 2 then last end) Last2,
  max(case when rowid = 3 then first end) First3,
  max(case when rowid = 3 then last end) Last3,
  max(case when rowid = 4 then first end) First4,
  max(case when rowid = 4 then last end) Last4,
  max(case when rowid = 5 then first end) First5,
  max(case when rowid = 5 then last end) Last5
from yourtable;

Se SQL Fiddle with Demo .

Dette kunne også skrives ved hjælp af PIVOT-funktionen, men da du ønsker at pivotere flere kolonner, vil du først se på at fjerne pivotering af din First og Last kolonner.

Unpivot-processen vil konvertere dine flere kolonner til flere rækker af data. Du har ikke angivet, hvilken version af SQL Server du bruger, men du kan bruge en SELECT med UNION ALL med CROSS APPLY eller endda UNPIVOT funktion til at udføre den første konvertering:

select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply 
(
  select 'First', First union all
  select 'Last', Last
) c (col, value)

Se SQL Fiddle with Demo . Dette konverterer dine data til formatet:

|    COL |       VALUE |
|--------|-------------|
| First1 | RandomName1 |
|  Last1 | RandomLast1 |
| First2 | RandomName2 |
|  Last2 | RandomLast2 |

Når dataene er i flere rækker, kan du nemt anvende PIVOT-funktionen:

select First1, Last1, 
  First2, Last2,
  First3, Last3, 
  First4, Last4, 
  First5, Last5
from
(
  select col = col + cast(rowid as varchar(10)), value
  from yourtable
  cross apply 
  (
    select 'First', First union all
    select 'Last', Last
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in (First1, Last1, First2, Last2,
              First3, Last3, First4, Last4, First5, Last5)
) piv;

Se SQL Fiddle with Demo

Begge giver et resultat af:

|      FIRST1 |       LAST1 |      FIRST2 |       LAST2 |      FIRST3 |       LAST3 |      FIRST4 |       LAST4 |      FIRST5 |       LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |


  1. Håndtering af negative værdier med sql

  2. Hvordan kan jeg slette en bruger fra sql server 2012, der ejer et skema

  3. DECOMPOSE() Funktion i Oracle

  4. php-fejl - Kald til en medlemsfunktion fetchAll() på boolean