Maison >base de données >tutoriel mysql >Comment transposer des colonnes dynamiques de SQL Server en lignes à l'aide d'UNPIVOT ?

Comment transposer des colonnes dynamiques de SQL Server en lignes à l'aide d'UNPIVOT ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 04:39:11394parcourir

How to Transpose Dynamic SQL Server Columns to Rows Using UNPIVOT?

Transposer les colonnes dynamiques de SQL Server en lignes à l'aide de UNPIVOT

Dans SQL Server, la fonction UNPIVOT permet de transposer des colonnes en lignes, une technique souvent dit non pivotant. Ceci est particulièrement utile lorsque vous travaillez avec des données comportant un nombre de colonnes dynamique ou variable.

Exemple de scénario

Considérez le tableau 1 suivant :

Table1
-----------------------------------------
Id       abc  brt ccc ddq eee fff gga hxx
-----------------------------------------
12345     0    1   0   5   0   2   0   0  
21321     0    0   0   0   0   0   0   0   
33333     2    0   0   0   0   0   0   0   
41414     0    0   0   0   5   0   0   1   
55001     0    0   0   0   0   0   0   2   
60000     0    0   0   0   0   0   0   0 
77777     9    0   3   0   0   0   0   0

L'objectif est d'annuler le pivotement de la Table1 dans la Table_Résultat_Attendue suivante, en considérant uniquement les valeurs supérieures à 0 :

Expected_Result_Table
---------------------
Id      Word   Qty>0
---------------------
12345    brt    1
12345    ddq    5
12345    fff    2
33333    abc    2
41414    eee    5
41414    hxx    1
55001    hxx    2
77777    abc    9
77777    ccc    3

Solution utilisant UNPIVOT

La fonction UNPIVOT prend un tableau à plusieurs colonnes et le transforme en un tableau plus large avec deux colonnes supplémentaires : une "valeur " contenant les données des colonnes de la table d'origine et une colonne " nom " identifiant la colonne source.

SELECT Id,
       name AS Word,
       value AS Qty>0
FROM Table1
UNPIVOT (value FOR name IN (abc, brt, ccc, ddq, eee, fff, gga, hxx)) AS unpvt
WHERE value > 0;

Ceci la requête générera le résultat attendu.

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