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
Libérer: 2024-12-05 04:39:11
original
393 Les gens l'ont consulté

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

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

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

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!

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