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]
Le but est de convertir les données dans la structure suivante :
[ID] [EntityId] [IndicatorName] [IndicatorValue]
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>
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;
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);
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);
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;
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!