Maison > base de données > tutoriel mysql > Comment effectuer des pivots dynamiques dans Oracle SQL avec des valeurs variables ?

Comment effectuer des pivots dynamiques dans Oracle SQL avec des valeurs variables ?

Susan Sarandon
Libérer: 2025-01-24 00:57:10
original
758 Les gens l'ont consulté

How to Perform Dynamic Pivots in Oracle SQL with Varying Values?

Tableau croisé dynamique Oracle SQL : gérer les valeurs changeantes

La gestion des valeurs dynamiques dans les instructions IN peut être délicate lors de l'utilisation de la fonction PIVOT dans Oracle SQL. Cet article apporte une solution.

PIVOT d'Oracle nécessite généralement l'utilisation de chaînes de valeurs statiques dans l'instruction IN, par exemple :

... pivot (sum(A) for B in (X))  
Copier après la connexion

Cependant, si la valeur de B est stockée dans une colonne de base de données et mise à jour régulièrement, la mise à jour manuelle de la chaîne X devient peu pratique.

Pour résoudre ce problème, nous pouvons utiliser une astuce qui consiste à créer une chaîne IN puis à l'utiliser dans la requête PIVOT. Décomposons-le :

Étape 1 : Construire la chaîne IN

Pour créer une chaîne, on utilise les fonctions COLUMN NEW_VALUE et LISTAGG comme suit :

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

Cette requête crée une chaîne similaire à :

<code>'A' AS A,'B' AS B,'C' AS C</code>
Copier après la connexion

Étape 2 : Utiliser des chaînes dans PIVOT

Nous pouvons maintenant ajouter cette chaîne à notre requête PIVOT :

SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Copier après la connexion

Restrictions :

Bien que cette méthode apporte une solution, elle présente une limitation : la longueur maximale de la chaîne de connexion est de 4 000 octets. Par conséquent, cette méthode peut ne pas convenir si le nombre de valeurs de B est très grand.

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