Il existe plusieurs façons d'obtenir le résultat souhaité. Similaire à @Sheela K R's réponse, vous pouvez utiliser une fonction d'agrégation avec une expression CASE mais elle peut être écrite de manière plus concise :
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;
Voir SQL Fiddle avec démo .
Cela pourrait également être écrit à l'aide de la fonction PIVOT, mais puisque vous voulez faire pivoter plusieurs colonnes, vous devriez d'abord envisager de ne pas pivoter votre First
et Last
Colonnes.
Le processus unpivot convertira vos multiples colonnes en plusieurs lignes de données. Vous n'avez pas spécifié la version de SQL Server que vous utilisez mais vous pouvez utiliser un SELECT
avec UNION ALL
avec CROSS APPLY
ou encore le UNPIVOT
fonction pour effectuer la première conversion :
select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply
(
select 'First', First union all
select 'Last', Last
) c (col, value)
Voir SQL Fiddle avec démo . Cela convertit vos données au format :
| COL | VALUE |
|--------|-------------|
| First1 | RandomName1 |
| Last1 | RandomLast1 |
| First2 | RandomName2 |
| Last2 | RandomLast2 |
Une fois que les données sont sur plusieurs lignes, vous pouvez facilement appliquer la fonction PIVOT :
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;
Voir SQL Fiddle avec démo
Les deux donnent un résultat de :
| FIRST1 | LAST1 | FIRST2 | LAST2 | FIRST3 | LAST3 | FIRST4 | LAST4 | FIRST5 | LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |