Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/03/2011, 23h35   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2011
Messages : 1
Points : 0
Points : 0
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 :
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 :
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 :
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.
Débutant75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 16h14   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
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 :
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h10.


 
 
 
 
Partenaires

Hébergement Web