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 20/04/2011, 14h55   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 19
Points : 2
Points : 2
Par défaut Requête imbriquée (Select from select avec union)

Bonjour

Afin de récupérer le résultat d'une soustraction entre deux champs, j'ai voulu passer par une requête union, mais celle-ci ne fonctionne pas.
Pourriez-vous m'aider à trouver l'erreur sur la requête suivante?

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
33
34
SELECT B.code, B.name, B.indicateurM, Z.indicateurM-1
FROM
(
  (SELECT
 tab1.code AS code,
  tab2.name AS name ,
    sum(tab1.indicateur) AS indicateurM 
FROM
  tab1,tab2
  WHERE
  tab1.code1=tab2.code1
   AND  (tab1.date=201102)
GROUP BY tab1.code,
  tab2.name ) B
 
 Union 
 
  (SELECT
  tab1.code AS code ,
  tab2.name AS name ,
  sum(tab1.indicateur) AS indicateurM-1
 
FROM
  tab1,tab2
WHERE
tab1.code1=tab2.code1
   AND  tab2.date=201104
 
   GROUP BY  tab1.code ,
  tab2.name ) Z 
)
WHERE Z.code=B.code 
         AND Z.name=B.name 
GROUP BY  B.code,B.name;
Ou
Auriez-vous une autre solution pour récupérer ces deux indicateurs dans la même table.
stamia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 15h14   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Bonjour,

Le code suivant devrait convenir :

Code :
1
2
3
4
5
6
7
8
SELECT tab1.code AS code
       , tab2.name AS name 
	   , sum(decode(to_char(tab1.date,'YYYYMM'),'201102',tab1.indicateur,0)) AS indicateurM 
	   , sum(decode(to_char(tab2.date,'YYYYMM'),'201104',tab1.indicateur,0)) AS indicateurM-1 
FROM tab1, tab2
WHERE tab1.code1=tab2.code1
GROUP BY tab1.code,
tab2.name ;
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h00   #3
Invité de passage
 
Inscription : décembre 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 19
Points : 2
Points : 2
ce code ne fonctionne pas non plus surement à cause du champ date qui n'est pas au format date mais en numérique.
Le decode peut-il fonctionner autrement?
stamia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 16h35   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il suffit dans ce cas de ne pas effectuer la conversion en date.
Il manquait par contre un filtre dans la requête de ojo77.

De mon côté je préfère la syntaxe ANSI à celle spécifique à Oracle quand c'est possible :
Code sql :
1
2
3
4
5
6
7
8
9
10
  SELECT tab1.code,
         tab2.name,
         sum(case tab1.date when 201102 then tab1.indicateur end) AS indicateurM,
         sum(case tab1.date when 201104 then tab1.indicateur end) AS indicateurM_1 
    FROM tab1
         INNER JOIN tab2
           ON tab2.code1 = tab1.code1
   WHERE tab1.date IN (201102, 201104)
GROUP BY tab1.code,
         tab2.name;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h21.


 
 
 
 
Partenaires

Hébergement Web