Maison >base de données >tutoriel mysql >Comment puis-je convertir des colonnes en lignes dans SQL Server ?
La conversion des colonnes d'une base de données en lignes est une technique importante dans l'analyse et la réorganisation des données. Il existe plusieurs façons d'effectuer cette conversion dans SQL Server, chacune avec ses propres avantages et considérations.
Méthode 1 : Fonction UNPIVOT
La fonction UNPIVOT prend en charge nativement la conversion de colonne en ligne. La syntaxe de UNPIVOT est la suivante :
<code class="language-sql">UNPIVOT (indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3, ...)) AS unpiv</code>
Exemple :
<code class="language-sql">SELECT id, entityId, indicatorname, indicatorvalue FROM yourtable UNPIVOT ( indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3) ) unpiv;</code>
Méthode 2 : utiliser CROSS APPLY d'UNION ALL
CROSS APPLY en utilisant UNION ALL est une autre façon de convertir des colonnes en lignes. Il combine de manière itérative les lignes en fonction des colonnes fournies :
<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>
Méthode 3 : Utiliser l'APPLICATION CROISÉE des VALEURS
Cette méthode utilise la clause VALUES dans CROSS APPLY pour spécifier les noms et valeurs des colonnes :
<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>
Méthode 4 : SQL dynamique
Pour les scénarios dans lesquels vous devez dérouler un grand nombre de colonnes, 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>
Vous pouvez effectuer efficacement des conversions de colonne en ligne dans SQL Server en choisissant la méthode la plus appropriée pour votre scénario spécifique.
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!