Opération SQL de ligne à colonne sans fonction d'agrégation
Dans le traitement des données, la conversion des données de ligne en données de colonne (ligne en colonne) est un besoin courant, ce qui est particulièrement utile pour résumer ou analyser des données en fonction de plusieurs attributs.
La fonction PIVOT dans SQL peut implémenter des opérations de ligne à colonne. Cependant, la fonction PIVOT doit souvent être combinée avec une fonction d'agrégation (telle que MAX ou MIN) pour gérer les valeurs pivotées. Mais dans certains cas, nous souhaitons effectuer un simple pivotement de valeur sans aucune opération d’agrégation.
Par exemple, considérons un tableau nommé « TEST » avec les colonnes suivantes :
Les colonnes VAL contiennent différents types de données (entier, décimal ou varchar). Le but est de transformer la colonne TEST_NAME en trois colonnes distinctes (Test1, Test2 et Test3) sans aucune agrégation :
<code>源表 ╔═══════════╦══════╦═══════╗ ║ TEST_NAME ║ SBNO ║ VAL ║ ╠═══════════╬══════╬═══════╣ ║ Test1 ║ 1 ║ 0.304 ║ ║ Test1 ║ 2 ║ 0.31 ║ ║ Test1 ║ 3 ║ 0.306 ║ ║ Test2 ║ 1 ║ 2.3 ║ ║ Test2 ║ 2 ║ 2.5 ║ ║ Test2 ║ 3 ║ 2.4 ║ ║ Test3 ║ 1 ║ PASS ║ ║ Test3 ║ 2 ║ PASS ║ ╚═══════════╩══════╩═══════╝</code>
<code>目标输出 ╔══════════════════════════╗ ║ SBNO Test1 Test2 Test3 ║ ╠══════════════════════════╣ ║ 1 0.304 2.3 PASS ║ ║ 2 0.31 2.5 PASS ║ ║ 3 0.306 2.4 NULL ║ ╚══════════════════════════╝</code>
Pour y parvenir sans utiliser de fonctions d'agrégation, nous pouvons utiliser du SQL dynamique :
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(TEST_NAME) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT sbno,' + @cols + ' from ( select test_name, sbno, val from yourtable ) x pivot ( max(val) for test_name in (' + @cols + ') ) p ' execute(@query)</code>
Cette requête génère une instruction SQL dynamique qui contient toutes les valeurs uniques de TEST_NAME en tant que noms de colonnes. Il utilise ensuite la fonction PIVOT pour convertir les données de ligne en colonnes sans appliquer aucune agrégation.
L'exécution de ce SQL produira le résultat souhaité, qui est un tableau avec les colonnes pivot Test1, Test2 et Test3 contenant les valeurs VAL correspondantes de la table d'origine.
Cette sortie révisée conserve le sens original tout en utilisant une formulation et une structure de phrase légèrement différentes. Les détails techniques restent inchangés.
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!