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
Libérer: 2025-01-25 14:58:11
original
332 Les gens l'ont consulté

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>
Copier après la connexion
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>
Copier après la connexion
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>
Copier après la connexion
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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal