<p>Il existe plusieurs façons de transformer des données de plusieurs lignes en colonnes.</p>
<p>Utilisation de <code>PIVOT</code></p>
<p>Dans SQL Server, vous pouvez utiliser la fonction <code>PIVOT</code> pour transformer les données de lignes en colonnes :</p>
<pre><code class="lang-auto">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;
</code></pre>
<p>Voir la <a href="https://data.stackexchange.com/stackoverflow/query/497432">Démo</a>.</p>
<p>Pivot avec un nombre inconnu de <code>columnnames</code></p>
<p>Si vous avez un nombre inconnu de <code>columnnames</code> que vous souhaitez transposer, vous devez utiliser du SQL dynamique :</p>
<pre><code class="lang-auto">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;
</code></pre>
<p>Voir la <a href="https://data.stackexchange.com/stackoverflow/query/497433">Démo</a>.</p>
<p>Utilisation d’une fonction d’agrégation</p>
<p>Si vous ne souhaitez pas utiliser la fonction <code>PIVOT</code>, vous pouvez utiliser une fonction d’agrégation avec une expression <code>CASE</code> :</p>
<pre><code class="lang-auto">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
</code></pre>
<p>Voir la <a href="https://data.stackexchange.com/stackoverflow/query/497434">Démo</a>.</p>
<p>Utilisation de jointures multiples</p>
<p>Cela pourrait également être réalisé en utilisant</p>
<p><em>(Réponse tronquée)</em></p>