Maison >base de données >tutoriel mysql >Comment puis-je convertir efficacement des colonnes en lignes dans SQL Server ?

Comment puis-je convertir efficacement des colonnes en lignes dans SQL Server ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-21 19:11:07686parcourir

How Can I Efficiently Convert Columns to Rows in SQL Server?

Guide détaillé sur la conversion de colonnes dans SQL Server

Lorsque vous travaillez avec des tableaux contenant un grand nombre de colonnes de métriques, la conversion de ces colonnes en lignes peut être très utile à des fins d'analyse et de reporting. Cette transformation implique de restructurer les données pour créer de nouvelles tables avec un schéma différent.

Énoncé du problème

Considérez le schéma de table suivant :

<code>[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]</code>

L'objectif est de convertir ces colonnes de métriques en lignes, en créant un nouveau tableau avec le schéma suivant :

<code>[ID] [EntityId] [IndicatorName] [IndicatorValue]</code>

Solution utilisant UNPIVOT

Une solution élégante pour accomplir cette tâche consiste à utiliser la fonction UNPIVOT. La syntaxe de UNPIVOT est la suivante :

<code>UNPIVOT ([unpivot column] FOR [pivot column] IN ([pivot values]))</code>

Dans cet exemple, la colonne non pivot représente la valeur de l'indicateur (par exemple, "Indicator1", "Indicator2", etc.), tandis que la colonne pivot représente le nom de la colonne lui-même. La requête suivante illustre comment utiliser UNPIVOT :

<code>select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;</code>

En exécutant cette requête, les colonnes de métriques seront converties en lignes et les noms et valeurs des métriques rempliront les nouvelles colonnes.

Alternatives

Outre UNPIVOT, il existe d'autres moyens de convertir des colonnes en lignes :

  • CROSS APPLY USING UNION ALL : Cette méthode implique l'utilisation de CROSS APPLY et UNION ALL pour spécifier explicitement le nom et la valeur de chaque métrique.
  • CROSS APPLY USING VALUES : Similaire à la méthode ci-dessus, mais en utilisant une clause VALUES dans CROSS APPLY.
  • SQL dynamique : Pour les situations avec un grand nombre de colonnes d'indicateurs, le SQL dynamique peut être utilisé pour générer automatiquement des instructions de requête.

Le choix de la solution dépend des besoins spécifiques et de la version de SQL Server utilisée.

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