"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment convertir les lignes en colonnes dans SQL Server à l'aide de la fonction PIVOT?

Comment convertir les lignes en colonnes dans SQL Server à l'aide de la fonction PIVOT?

Publié le 2025-03-22
Parcourir:190

How to Convert Rows to Columns in SQL Server Using the PIVOT Function?

Convertir les lignes en colonnes en utilisant la fonction pivot dans SQL Server

question

Les tables de pivot dans SQL Server fournissent un moyen puissant de transposer les données des lignes aux colonnes. Cependant, les utilisateurs peuvent rencontrer des défis lors de la construction de la bonne requête.

Solution

Utilisez la fonction pivot pour les valeurs de colonne connues:

Pour les valeurs de colonne prédéfinies (dans ce cas, le nombre de semaines), vous pouvez utiliser directement la fonction pivot:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

générer dynamiquement les valeurs de colonne de perspective:

Pour gérer les valeurs de colonne inconnues (telles que les semaines dynamiques), une combinaison de fonctions SQL et de fenêtre dynamiques peut être utilisée:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ','   QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,'   @cols   ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in ('   @cols   ')
            ) p '

execute(@query);

résultat:

Les deux méthodes produisent le même résultat:

| Acheter | 1 | 2 | 3 |

| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3