Convertir efficacement des lignes en colonnes
Il existe plusieurs façons de transformer des données de plusieurs lignes en colonnes.
Utilisation de PIVOT
Dans SQL Server, vous pouvez utiliser la fonction PIVOT pour transformer les données de lignes en colonnes :
select Firstname, Amount, PostalCode, LastName, AccountNumber
from
(
select value, columnname
from yourtable
) d
pivot
(
max(value)
for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber)
) piv;
Voir la Démo.
Pivot avec un nombre inconnu de columnnames
Si vous avez un nombre inconnu de columnnames que vous souhaitez transposer, vous devez utiliser du SQL dynamique :
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName)
from yourtable
group by ColumnName, id
order by id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT ' + @cols + N' from
(
select value, ColumnName
from yourtable
) x
pivot
(
max(value)
for ColumnName in (' + @cols + N')
) p '
exec sp_executesql @query;
Voir la Démo.
Utilisation d’une fonction d’agrégation
Si vous ne souhaitez pas utiliser la fonction PIVOT, vous pouvez utiliser une fonction d’agrégation avec une expression CASE :
select
max(case when columnname = 'FirstName' then value end) Firstname,
max(case when columnname = 'Amount' then value end) Amount,
max(case when columnname = 'PostalCode' then value end) PostalCode,
max(case when columnname = 'LastName' then value end) LastName,
max(case when columnname = 'AccountNumber' then value end) AccountNumber
from yourtable
Voir la Démo.
Utilisation de jointures multiples
Cela pourrait également être réalisé en utilisant
(Réponse tronquée)