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

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 13
    Points
    13
    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 expérimenté 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 : 49
    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
    Points : 1 597
    Points
    1 597
    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 à l'essai
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 13
    Points
    13
    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
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    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