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

Langage SQL Discussion :

requete imbriquée SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Par défaut requete imbriquée SQL
    bonjour,
    j'ai un probleme pour rediger ma requete.

    la table op.stock:
    ref quantite date_achat vendu
    1 20 12/01/2006 O
    1 40 15/02/2006 N
    1 20 01/03/2006 O
    2 10 15/01/2006 O
    2 20 02/05/2006 N
    2 30 02/05/2006 N
    ...
    objectif : avoir le total des achats par ref et le total des ventes par ref sur la même ligne.

    Resulat souhaité:
    ref quantite quantite_vendue
    1 80 40
    2 60 10
    ...

    J'arrive à faire les 2 requetes separement mais je souhaite le faire en une seule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select ref, sum(quantite) from stock group by ref
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select ref, sum(quantite) from stock where vendu = 'O' group by ref
    Merci pour votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Est-ce que ça pourrait faire l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select a.ref, sum(a.qte), sum(b.qte)    
    from MaTable a                                
    left join MaTable b                           
    on a.ref = b.ref                        
    and rrn(a) = rrn(b)                     
    and b.vendu = 'O'                       
    group by a.ref                          
    order by a.ref

    rrn = relative record number

  3. #3
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    ceci devrait convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT P.ref, 
      (SELECT sum(S1.quantite) FROM stock S1 WHERE S1.ref = P.ref GROUP BY S1.ref) AS Qte1,
      (SELECT sum(S2.quantite) FROM stock S2 WHERE S2.ref = P.ref AND S2.vendu = 'O' GROUP BY S2.ref) AS Qte2
    FROM Stock P
    Sinon, merci d'indiquer le souci rencontré et de préciser ton SGBD et sa version, conformément aux CONSEILS... à lire AVANT de POSTER
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 218
    Billets dans le blog
    16
    Par défaut
    Bonjour Stoonman,

    Une variante : utilisation d'une expression de table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select r.Ref, Sum(Quantite) as Total_Par_Ref, v.Total_Vendu_Par_Ref 
    From   Stock as r  
             Left Join (Select Ref, Sum(Quantite) as Total_Vendu_Par_Ref 
                        From Stock 
                        Where Vendu = 'O' 
                        Group by Ref) as v
             On  r.Ref = v.Ref
    Group by r.Ref, v.Total_Vendu_Par_Ref 
    Order by r.Ref ;

  5. #5
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ref, sum(quantite) as quantite
    , sum (case (when Vendu='O' then quantite else 0 end)) as quantite_vendue
    FROM stock
    GROUP BY ref

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Par défaut
    Citation Envoyé par Xo
    ceci devrait convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT P.ref, 
      (SELECT sum(S1.quantite) FROM stock S1 WHERE S1.ref = P.ref GROUP BY S1.ref) AS Qte1,
      (SELECT sum(S2.quantite) FROM stock S2 WHERE S2.ref = P.ref AND S2.vendu = 'O' GROUP BY S2.ref) AS Qte2
    FROM Stock P
    Sinon, merci d'indiquer le souci rencontré et de préciser ton SGBD et sa version, conformément aux CONSEILS... à lire AVANT de POSTER
    j'ai réussi à faire fonctionner la fonction ci-dessus proposé par Xo.
    je ne suis pas un informaticien, mais je pense que nous avons un SQL server qui tourne sous Oracle9.

    QUESTION : comment affiché uniquement les marchandises encore en stock?? cad lorsque sum(S1.quantite) <> sum(S2.quantite)??

    Merci encore pour ts.

  7. #7
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    A partir de ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ref, sum(quantite) AS quantite
    , sum (case (when Vendu='O' then quantite else 0 end)) AS quantite_vendue
    FROM stock
    GROUP BY ref
    HAVING sum(quantite) <> sum (case (when Vendu='O' then quantite else 0 end))
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    FROM (
    SELECT ref, sum(quantite) AS quantite
    , sum (case (when Vendu='O' then quantite else 0 end)) AS quantite_vendue
    FROM stock
    GROUP BY ref
    ) AS table_1
    WHERE quantite <> quantite_vendue

  8. #8
    Membre éprouvé Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Par défaut
    Bonjour,

    Si tu utilises cette fonction, tu peux l'améliorer pour faire ce que tu souhaites.

    Citation Envoyé par Xo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SELECT P.ref, 
      (SELECT sum(S1.quantite) FROM stock S1 WHERE S1.ref = P.ref GROUP BY S1.ref) AS Qte1,
      (SELECT sum(S2.quantite) FROM stock S2 WHERE S2.ref = P.ref AND S2.vendu = 'O' GROUP BY S2.ref) AS Qte2
    FROM Stock P
    Il suffit d'ajouter après la même requète
    Oliv'

Discussions similaires

  1. SQL Compact Edition et requete imbriqué ?
    Par slacky dans le forum ADO.NET
    Réponses: 14
    Dernier message: 25/08/2011, 11h43
  2. Requete imbriquée dans sql
    Par belfafi dans le forum Développement
    Réponses: 1
    Dernier message: 18/05/2011, 15h02
  3. Requete imbriquée SQL
    Par marianneL dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/07/2010, 15h51
  4. Réponses: 6
    Dernier message: 21/11/2009, 17h42
  5. [Requête SQL]requete imbrique appelant même table
    Par moicats dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/03/2007, 16h36

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