IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Tableau croisé dynamique sous oracle


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Points : 124
    Points
    124
    Par défaut Tableau croisé dynamique sous oracle
    Salut,

    J'ai un probleme qui se pose et étant débutant en SQL et base de données en générale, je voudrais un avis sur la faisabilité de ma solution.

    En fait je pars d'une table qui a cette description:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    - DATE 
    - Abscisse1 
    - Abscisse 2 
    - NomProduit 
    - ID_Ordonnée 
    - Valeur de l ordonnée
    Je peux avoir 1 à N noms de produit et 1 à M ordonnées.

    Je souhaiterai un code SQL me renvoyant une table de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - DATE 
    - Abscisse1 
    - Abscisse2 
    - NomProduit1 pour Ordonnée1 
    ... 
    - NomProduit1 pour OrdonnéeM 
    ... 
    ... 
    - NomProduitN pour Ordonnée1 
    ... 
    - NomProduitN pour OrdonnéeM
    la table est remplie avec les valeurs des ordonnées.

    La forme du resultat (nbres de colonne) est donc variable pour chaque execution.
    J'espere etre assez clair. Le but est d'avoir des colonnes toutes pretes à être tracé l'une en fonction de l'autre.

    Je pense qu'il faut avoir un code SQL qui:
    - créer une table dynamiquement en fonction du contenu de la première.
    - remplir par succession de requete les cellules (ou par ligne?)

    Mon problème est en faisant tout par programmation c'est trop long car il y a plusieurs dizaines voir centaines de lignes à traiter. Je dois donc faire faire un max de traitement par le serveur.

    Seulement je débute en SQL et cela m'a l'air déjà bien compliqué, je suis déjà fort en retard pour mon projet et que pendant 3 semaines on a des coupures de courant quotidienne donc c'est pas facile pour avancer et apprendre.

    Si vous pouvez me guider juste sur un exemple de code pour me lancer ca serai sympa.
    Je pense pouvoir être capable de créer par programmation la table en fonction du contenu de la première; mon soucis est surtout de la remplir sans perdre trop de temps, enfin bref de bien utiliser les capacités d'Oracle.

    Merci d'avance.
    N_Ron

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non désolé ce n'est pas possible, en base de données les éléments ont un nombre de colonne fixe.

    Si vous voulez avoir des éléments variables, il vous faudra faire du PL/SQL.

    Avez-vous un jeu de données raisonnable, peut-être qu'on pourrait vous aiguiller sur une autre solution ?

  3. #3
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Points : 124
    Points
    124
    Par défaut Tant pis
    Bonjour,

    Merci de cette réponse rapide, cela m'empechera de chercher dans le vide.

    Si je crée la table auparavant, en créant le code de création par programmation? Ca serait toujours pas possible de faire le reste en un code SQL?

    Sinon ce n'est pas grave je vais me rabattre vers des ajouts multiples mais avec WinDev on peut n'envoyer uniquement qu'un ajout par requete!
    Heureusement leur procédure stockée sont potable.
    Il faut que je trouve l'algorithme qui me transformera mes colonnes en une ligne de la manière la plus optimisé.

    Encore Merci.

    N_Ron

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ca c'est faisable bien entendu, soit avec l'opérateur PIVOT (en 11g), soit avec des max(case).

    Apparement vous avez deux façons de faire varier votre NomProduit en fonction de vos ordonnées, mais vous pouvez déjà vous appuyer sur ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT
        DATE,
        ABSCISSE1,
        ABSCISSE2,
        MAX(CASE ORDONNEE WHEN 1 THEN NomProduit END) AS NomProduit1,
        MAX(CASE ORDONNEE WHEN 2 THEN NomProduit END) AS NomProduit2,
        MAX(CASE ORDONNEE WHEN 3 THEN NomProduit END) AS NomProduit3,
    ...
        MAX(CASE ORDONNEE WHEN M THEN NomProduit END) AS NomProduitM
    FROM
        <MaTable>
    GROUP BY
        DATE,
        ABSCISSE1,
        ABSCISSE2

  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 122
    Points : 124
    Points
    124
    Par défaut Merci
    Bonjour Waldar,

    En effet ce code fonctionne parfaitement pour ce que je veux faire après quelque petite modification.
    Je n'ai plus qu'à l'adapter par programmation en fonction du contenu de mon tableau initial. Cela redevient plus dans mes cordes.

    Un grand merci. Bonne continuation.

    Si certaines personnes sont interressée par la solution à ce problème, faîtes-moi signe.

    Mich

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/08/2011, 17h58
  2. Tableau croisé dynamique sous Excel 2007
    Par kizzy dans le forum Excel
    Réponses: 1
    Dernier message: 30/06/2009, 10h18
  3. Réponses: 6
    Dernier message: 20/02/2007, 10h42
  4. filtrer tableau croisé dynamique sous excel
    Par kernel57 dans le forum Excel
    Réponses: 7
    Dernier message: 17/11/2006, 14h18
  5. tableau croisé dynamique sous delphi, comment ?
    Par Brice Yao dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2005, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo