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 :

Pivot - création de requête


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Pivot - création de requête
    Bonjour,

    Je travaille sur la version 11g d'oracle. A priori on peut utiliser une requete pivot mais je ne suis pas trop expert.

    Je voulais savoir s'il était possible d'obtenir ce genre de résultat:
    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
     
     
    CodPays  DT_jour 	DT_JourComparé	clt_10	clt_11	PaysComp clt_10	clt_11			
    266 	01/01/2011	01/01/2010	300	300	255	5000	4000			
    266	01/02/2011	01/02/2010	300	300	255	5000	4000			
    266	01/03/2011	01/03/2010	300	300	255	5000	4000			
    266	01/04/2011	01/04/2010	300	300	255	5000	4000			
    266	01/05/2011	01/05/2010	300	300	255	5000	4000			
     
    CodPays  DT_jour 	DT_JourComparé	clt_10	clt_11	PaysComp clt_10	clt_11	PaysComp clt_10	clt_11
    255	01/01/2011	01/01/2010	100	150	256	110	80	142	800	900
    255	01/02/2011	01/02/2010	100	150	256	120	150	142	300	500
    255	01/03/2011	01/03/2010	100	150	256	110	90	142	200	100
    255	01/04/2011	01/04/2010	100	150	256	120	200	142	200	100
    255	01/05/2011	01/05/2010	100	150	256	100	150	142	200	100

    Voici les table utilisées:

    - la 1ère : Suivi_Client

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    CodPays  DT_jour 	DT_JourComparé clt_10 clt_11
    140	01/01/2011	01/01/2010	5000	4000
    140	01/02/2011	01/02/2010	5000	4000
    140	01/03/2011	01/03/2010	5000	4000
    140	01/04/2011	01/04/2010	5000	4000
    140	01/05/2011	01/05/2010	5000	4000
    266	01/01/2011	01/01/2010	300	300
    266	01/02/2011	01/02/2010	300	300
    266	01/03/2011	01/03/2010	300	300
    266	01/04/2011	01/04/2010	300	300
    266	01/05/2011	01/05/2010	300	300
    255	01/01/2011	01/01/2010	100	150
    255	01/02/2011	01/02/2010	100	150
    255	01/03/2011	01/03/2010	100	150
    255	01/04/2011	01/04/2010	100	150
    255	01/05/2011	01/05/2010	100	150
    256	01/01/2011	01/01/2010	110	80
    256	01/02/2011	01/02/2010	120	150
    256	01/03/2011	01/03/2010	110	90
    256	01/04/2011	01/04/2010	120	200
    256	01/05/2011	01/05/2010	100	150
    141	01/01/2011	01/01/2010	800	900
    141	01/02/2011	01/02/2010	300	500
    141	01/03/2011	01/03/2010	200	100
    141	01/04/2011	01/04/2010	200	100
    141	01/05/2011	01/05/2010	200	100
    142	01/01/2011	01/01/2010	800	900
    142	01/02/2011	01/02/2010	300	500
    142	01/03/2011	01/03/2010	200	100
    142	01/04/2011	01/04/2010	200	100
    142	01/05/2011	01/05/2010	200	100
    - La 2ème : Table comparatif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    CodPays  CodPays_comp
    266	140
    255	256
    255	142


    L'idee est de pouvoir comparer des pays entre eux.
    Exemple dans la table comparatif, on voit que le pays 266 est comparable au
    pays 140. On affichera donc les données du pays 140 (table SuiviClient) en face des données du magasin 266.
    Le pays 255 est quant à lui comparable à 2 pays : 256 et 142 on affichera donc en face du pays 255 les données du pays 256 et 142.


    Je ne sais pas si il est possible d'obtenire ce résultat avec une requete pivot.
    D'ailleurs ce n'est peut être pas non plus la meilleure mise en forme pour le résultat, aussi n'hésitez pas à me faire des propositions car je suis en manque d'inspiration..

    Merci de votre retour.

  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
    Points : 4 926
    Points
    4 926
    Par défaut
    il n'est pas possible d'avoir un nombre dynamique de colonne.

    Suivant ce que tu recherches (un affichage écran, du XML ou un object pour java), tu pourras employer LISTAGG, XMLAGG (voire pivotxml) ou COLLECT

    example avec LISTAGG

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT A.CODPAYS, B.DT_JOUR, b.DT_JOURCOMPARE, B.CLT_10, B.CLT_11,
      LISTAGG (A.CODPAYS_COMP || chr(9) || C.CLT_10 || chr(9) || C.CLT_11, chr(9))
                WITHIN GROUP (ORDER BY A.CODPAYS_COMP) "PAYS;CLT_10;CLT_11;..."
    FROM t2 A JOIN t1 b ON A.codpays = B.codpays
    JOIN t1 C ON A.codpays_COMP = c.codpays AND b.DT_JOUR = C.DT_JOUR
                   AND b.DT_JOURCOMPARE = C.DT_JOURCOMPARE
    GROUP BY A.CODPAYS, B.DT_JOUR, b.DT_JOURCOMPARE, B.CLT_10, B.CLT_11
    ORDER BY 1,2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       CODPAYS DT_JOUR   DT_JOURCO     CLT_10     CLT_11 PAYS;CLT_10;CLT_11;...
    ---------- --------- --------- ---------- ---------- ----------------------------------------------------------------
           255 01-JAN-11 01-JAN-10        100        150 142        800     900     256     110     80
           255 01-FEB-11 01-FEB-10        100        150 142        300     500     256     120     150
           255 01-MAR-11 01-MAR-10        100        150 142        200     100     256     110     90
           255 01-APR-11 01-APR-10        100        150 142        200     100     256     120     200
           255 01-MAY-11 01-MAY-10        100        150 142        200     100     256     100     150
           266 01-JAN-11 01-JAN-10        300        300 140        5000    4000
           266 01-FEB-11 01-FEB-10        300        300 140        5000    4000
           266 01-MAR-11 01-MAR-10        300        300 140        5000    4000
           266 01-APR-11 01-APR-10        300        300 140        5000    4000
           266 01-MAY-11 01-MAY-10        300        300 140        5000    4000

Discussions similaires

  1. pb création de requète
    Par grenet dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/06/2006, 11h08
  2. problème de création de requète sous VBA
    Par Golork dans le forum Access
    Réponses: 4
    Dernier message: 02/06/2006, 14h35
  3. Soucis de création de requêtes sql
    Par Zebeber dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 26/05/2006, 11h13
  4. Création de requête
    Par Waluigi dans le forum Access
    Réponses: 3
    Dernier message: 03/05/2006, 08h46
  5. création de requète à partir de 2 tables
    Par cheucheu dans le forum Access
    Réponses: 4
    Dernier message: 14/12/2005, 16h49

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