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

Comment convertir efficacement des colonnes en lignes dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-21 19:32:09
original
1041 Les gens l'ont consulté

How to Efficiently Convert Columns to Rows in SQL Server?

SQL Server : Convertir les colonnes en lignes

Dans SQL Server, vous devrez peut-être convertir une table contenant plusieurs colonnes d'indicateurs en une structure de lignes pour chaque indicateur et sa valeur correspondante. Ceci peut être réalisé grâce à plusieurs techniques.

Fonction UNPIVOT

La fonction UNPIVOT est un moyen simple de convertir des colonnes en lignes. Il convertit les colonnes spécifiées en lignes, les noms de colonnes d'origine devenant de nouvelles lignes intitulées « nom de l'indicateur ». La valeur de la colonne d'origine devient la ligne intitulée « valeur de l'indicateur ».

<code class="language-sql">SELECT id, entityId,
  indicatorname,
  indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;</code>
Copier après la connexion

Utilisez CROSS APPLY d'UNION ALL

Une autre façon consiste à combiner CROSS APPLY avec UNION ALL :

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  SELECT 'Indicator1', Indicator1 UNION ALL
  SELECT 'Indicator2', Indicator2 UNION ALL
  SELECT 'Indicator3', Indicator3 UNION ALL
  SELECT 'Indicator4', Indicator4 
) c (indicatorname, indicatorvalue);</code>
Copier après la connexion

CROSS APPLY en utilisant la clause VALUES

Si votre version de SQL Server le prend en charge, vous pouvez également utiliser la clause VALUES avec CROSS APPLY :

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);</code>
Copier après la connexion

SQL dynamique

Pour les tables comportant de nombreuses colonnes d'indicateurs, générer manuellement les instructions SQL nécessaires peut être fastidieux. Dynamic SQL peut automatiser ce processus :

<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

SELECT @colsUnpivot 
  = STUFF((SELECT ',' + QUOTENAME(C.column_name)
           FROM INFORMATION_SCHEMA.COLUMNS AS C
           WHERE C.table_name = 'yourtable' AND
                 C.column_name LIKE 'Indicator%'
           FOR XML PATH('')), 1, 1, '')

SET @query 
  = 'SELECT id, entityId,
        indicatorname,
        indicatorvalue
     FROM yourtable
     UNPIVOT
     (
        indicatorvalue
        FOR indicatorname IN (' + @colsunpivot +')
     ) u'

EXEC sp_executesql @query;</code>
Copier après la connexion

Ces technologies fournissent des méthodes flexibles de conversion de colonnes en lignes dans SQL Server et peuvent s'adapter à différentes structures de tables et besoins en données.

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