sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - PIVOT - två kolumner i rader

Det finns några olika sätt som du kan få det resultat du vill ha. Liknar @Sheela K R's svar du kan använda en aggregatfunktion med ett CASE-uttryck men det kan skrivas på ett mer kortfattat sätt:

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-fiol med demo .

Detta kan också skrivas med PIVOT-funktionen, men eftersom du vill pivotera flera kolumner så vill du först titta på att ta bort din First och Last kolumner.

Unpivot-processen kommer att konvertera dina flera kolumner till flera rader med data. Du har inte angett vilken version av SQL Server du använder men du kan använda en SELECT med UNION ALL med CROSS APPLY eller till och med UNPIVOT funktion för att utföra den första konverteringen:

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-fiol med demo . Detta konverterar dina data till formatet:

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

När data finns i flera rader kan du enkelt använda 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-fiol med demo

Båda ger ett resultat av:

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


  1. PLpgSQL-funktion för att hitta kolumner med endast NULL-värden i en given tabell

  2. dimensions- och enhetsanalys i SQL-databas

  3. mysql främmande nyckelreferens från en sammansatt nyckel

  4. Hur skapar jag loggfil i Oracle med PL/SQL?