Maison >base de données >tutoriel mysql >Comment transposer efficacement les lignes en colonnes dans SQL Server?

Comment transposer efficacement les lignes en colonnes dans SQL Server?

Barbara Streisand
Barbara Streisandoriginal
2025-01-25 14:58:11335parcourir

How to Efficiently Transpose Rows into Columns in SQL Server?

Dans le serveur SQL, la ligne est efficacement convertie en colonne

SQL Server fournit une variété de méthodes pour convertir les données des lignes aux colonnes.

Fonction de pivot

La fonction de pivot permet d'utiliser la syntaxe suivante pour transformer directement les données:

<code class="language-sql">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>
Pour la situation inconnue du nombre de colonnes, vous pouvez utiliser la dynamique SQL:

<code class="language-sql">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>
La fonction de polymérisation et l'expression de cas

ou, vous pouvez utiliser la fonction polymère:

<code class="language-sql">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>
Connexions multiples

Dans le cas d'une colonne fermée, vous pouvez utiliser plusieurs connexions:

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn