Maison >base de données >tutoriel mysql >Comment faire pivoter dynamiquement des tables Oracle SQL avec des valeurs dynamiques ?
Pivot dynamique et valeur dynamique Oracle SQL
Un défi courant lors de l'utilisation de tableaux croisés dynamiques dans Oracle SQL consiste à créer des tableaux croisés dynamiques avec des valeurs dynamiques. L'approche traditionnelle consiste à ajouter manuellement de nouvelles valeurs à la chaîne statique utilisée dans l'instruction du tableau croisé dynamique IN, ce qui est inefficace.
Limitations des instructions IN dynamiques
L'intégration d'instructions dynamiques directement dans des instructions PIVOT IN à l'aide de sous-requêtes, de variables PL/SQL ou de requêtes imbriquées n'est pas prise en charge. De plus, l'utilisation de PIVOT XML peut entraîner une sortie sous-optimale.
Solution : Créer une chaîne IN dynamique
Pour surmonter ces limitations, une méthode de création de chaînes IN dynamiques peut être utilisée. Voici un guide étape par étape :
Créez une instruction SELECT pour générer des chaînes dynamiques :
Exemple : Considérez l'exemple de tableau suivant :
<code>| myNumber | myValue | myLetter | |---|---|---| | 1 | 2 | A | | 1 | 4 | B | | 2 | 6 | C | | 2 | 8 | A | | 2 | 10 | B | | 3 | 12 | C | | 3 | 14 | A |</code>
Pour générer une chaîne IN dynamique, exécutez l'instruction suivante :
<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter,',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM (SELECT DISTINCT myLetter FROM myTable);</code>
Incorporer des chaînes dynamiques dans les requêtes pivot :
Exemple de requête pivot :
<code class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
Sortie :
<code>| MYNUMBER | A_VAL | B_VAL | C_VAL | |---|---|---|---| | 1 | 2 | 4 | NULL | | 2 | 8 | 10 | 6 | | 3 | 14 | NULL | 12 |</code>
Limitations :
Une limitation de cette méthode est que la taille maximale de chaîne pouvant être concaténée est de 4 000 octets.
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!