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 :

Requête imbriquée (Select from select avec union)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    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 : 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
    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.

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Bonjour,

    Le code suivant devrait convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ;

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Par défaut
    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?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

Discussions similaires

  1. Problème requête SQL select * from( select )
    Par yacinew dans le forum Paradox
    Réponses: 1
    Dernier message: 12/04/2015, 07h15
  2. Select * from (select * from T)
    Par hadi2007 dans le forum Informix
    Réponses: 3
    Dernier message: 09/08/2009, 11h36
  3. select * from (select * from mabase) Impossible ?
    Par maniolo dans le forum Sybase
    Réponses: 9
    Dernier message: 04/03/2009, 13h33
  4. Requète imbriqué dans le SELECT
    Par Virtuosity dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/12/2007, 17h06
  5. Réponses: 6
    Dernier message: 20/11/2007, 11h14

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