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

SQL Oracle Discussion :

Utilisation du PIVOT avec paramètres inconnus


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut Utilisation du PIVOT avec paramètres inconnus
    Bonjour,

    Je souhaite réaliser la requête suivante :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM   (select pol_numpol, sor_ident, ccp_libelle, gad_prime_nette
    from f_polices, f_sit_objet_risque, f_garantie_dyn, t_cdecpt, f_tarif_ass
    where gad_ptrsorid = sor_ident
    and sor_ptrpolid = pol_ident
    and sor_datetarif = tas_dateffet
    and tas_codeintercalaire = ccp_code
    and gad_prime_nette is not null and gad_prime_nette != 0
    PIVOT XML (SUM(gad_prime_nette) AS prime FOR (ccp_libelle) IN (SELECT DISTINCT ccp_code FROM   t_cdecpt))                                                   
    ORDER BY pol_numpol, sor_ident

    sans que mon résultat ne soit du XML. Le problème est que je ne peux pas connaitre à l'avance ni le nombre, ni les libellés de mes ccp_code... Comment faire?

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    dans sql il est impossible d'avoir un nombre dynamique de colonne.

    tu peux tenter du plsql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var r refcursor
     
    declare joblist varchar2(4000);
    begin
      select listagg( ''''||job||''' as '||job,',') within group (order by job) 
        into joblist from (select distinct job from emp);
      open :r for 'select * from (select deptno,job from emp) pivot  
        (count(*) for (job) in ('||joblist||'))';
    end;
    /
     
    print r
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        DEPTNO    ANALYST      CLERK    MANAGER  PRESIDENT   SALESMAN
    ---------- ---------- ---------- ---------- ---------- ----------
            30          0          1          1          0          4
            20          2          2          1          0          0
            10          0          1          1          1          0

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Merci beaucoup!!!

    Donc avec ma requête, si j'ai bien compris ça donne ça :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var r refcursor
     
    declare joblist varchar2(4000);
     
    begin
      SELECT listagg( ''''||ccp_libelle||''' as '||ccp_libelle,',') within GROUP (ORDER BY ccp_libelle)
        INTO joblist FROM (SELECT DISTINCT ccp_libelle FROM t_cdecpt);
      open :r FOR 'select * from (select pol_numpol, sor_ident, ccp_libelle, gad_prime_nette
            from f_polices, f_sit_objet_risque, f_garantie_dyn, t_cdecpt, f_tarif_ass
            where gad_ptrsorid = sor_ident
            and sor_ptrpolid = pol_ident
            and sor_datetarif = tas_dateffet
            and tas_codeintercalaire = ccp_code
            and gad_prime_nette is not null and gad_prime_nette != 0) 
            pivot (count(*) for (ccp_libelle) in ('||joblist||'))';
    end;
    /
     
    print r

    il me dit que j'ai un problème de virgule à la ligne 6 lorsque je l'exécute sous TOAD... ???

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Même en ne mettant que ce code la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var r refcursor
    declare joblist varchar2(4000);
    begin
      SELECT listagg( ''''||ccp_libelle||''' as '||ccp_libelle,',') within GROUP (ORDER BY ccp_libelle) 
        INTO joblist FROM (SELECT DISTINCT ccp_libelle FROM t_cdecpt);
        open :r FOR 'select * from (select ccp_code,ccp_libelle from t_cdecpt) pivot  
        (count(*) for (ccp_libelle) in ('||joblist||'))';
    end;
    /
    print r
    J'ai toujours un problème de 'virgule' à la ligne 5... J'ai essayé de placer des virgules à plusieurs endroits... Ça ne résout rien

  5. #5
    Membre émérite Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Par défaut
    Aurai-tu une virgule dans la colonne ccp_libelle ?

    Jko

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 111
    Par défaut
    Non non, juste "ccp_libelle"

Discussions similaires

  1. Utiliser une méthode avec paramètres
    Par SI_BDD dans le forum JSF
    Réponses: 18
    Dernier message: 05/05/2011, 18h40
  2. Réponses: 1
    Dernier message: 30/06/2010, 10h56
  3. Réponses: 7
    Dernier message: 06/06/2009, 22h31
  4. Etat utilisant une requète avec paramètres
    Par noakiss dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/04/2008, 11h04
  5. Réponses: 22
    Dernier message: 03/01/2008, 22h42

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