Maison > base de données > tutoriel mysql > Comment convertir des colonnes en lignes dans SQL Server (T-SQL) ?

Comment convertir des colonnes en lignes dans SQL Server (T-SQL) ?

Linda Hamilton
Libérer: 2025-01-21 19:22:10
original
549 Les gens l'ont consulté

How to Convert Columns to Rows in SQL Server (T-SQL)?

Plusieurs méthodes pour convertir des colonnes en lignes dans SQL Server

Cet article décrit comment convertir les données de colonne d'une table SQL Server en données de ligne. Supposons que la structure de votre table soit la suivante :

[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
Copier après la connexion

Le but est de convertir les données dans la structure suivante :

[ID] [EntityId] [IndicatorName] [IndicatorValue]
Copier après la connexion

Exemple de résultats cibles :

<code>1 1 'Indicator1' 'Indicator 1 的值'
2 1 'Indicator2' 'Indicator 2 的值'
3 1 'Indicator3' 'Indicator 3 的值'
4 2 'Indicator1' 'Indicator 1 的值'</code>
Copier après la connexion

Solution :

Les méthodes suivantes peuvent réaliser une conversion colonne en ligne :

1. Utilisez la fonction UNPIVOT

La fonction UNPIVOT convertit efficacement les colonnes en lignes :

SELECT id, entityId, indicatorname, indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;
Copier après la connexion

Veuillez vous assurer que les types de données des colonnes impliquées dans la conversion sont cohérents.

2. Utilisez CROSS APPLY et UNION ALL

Une autre façon consiste à utiliser CROSS APPLY et UNION ALL :

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

3. Utilisez CROSS APPLY et VALUES (applicable aux versions plus récentes de SQL Server)

Dans les versions plus récentes de SQL Server, vous pouvez utiliser les clauses CROSS APPLY et VALUES :

SELECT id, entityid, indicatorname, indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
Copier après la connexion

4. Utiliser du SQL dynamique (adapté à un grand nombre de colonnes d'indicateurs)

Pour les grandes tables comportant un grand nombre de colonnes d'indicateurs, vous pouvez utiliser du SQL dynamique pour générer automatiquement des requêtes :

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(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

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

EXEC sp_executesql @query;
Copier après la connexion

La méthode que vous choisissez dépend de la taille de votre table et de votre version de SQL Server. Pour moins de colonnes, les trois premières méthodes suffisent ; pour les tables comportant un grand nombre de Indicator colonnes, la méthode SQL dynamique est plus efficace. N'oubliez pas de remplacer yourtable par le nom réel de votre table.

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 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