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 :

Requête et sous-requête


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Par défaut Requête et sous-requête
    Bonjour,

    Pourriez-vous svp m'aider et me dire ou est le problème dans ma requête.
    Je n'arrive pas à m'en sortir pour qu'elle fonctionne et qu'elle n'explose pas les resources de mon réseau.

    Voici mes tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TABLE1
     
    ARTICLE MOIS CLIENT PORT
    FRUIT    1      A     3
    LEGUME   1      A     5
    LEGUME   2      A     5
    FRUIT    1      B     6
    LEGUME   1      B     2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TABLE2
     
    ARTICLE MOIS CLIENT TYPFAC TYPERREUR CA
    FRUIT    1     A     FAC             12
    FRUIT    1     A     FAC             12
    FRUIT    1     A     AVOIR    DEF     -5
    FRUIT    1     A     AVOIR    HS     -2
    LEGUME   1     A     FAC             20
    LEGUME   2     A     FAC             20
    FRUIT    2     A     AVOIR    DEF     -2
    FRUIT    1     B     FAC             20
    FRUIT    1     B     FAC             32
    LEGUME   1     B     FAC             17
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LE RESULTAT SOUHAITE
     
    CLIENT NBART MOIS CA RENDU RENDUDEF PORT
    A       3     1   44   -7    -5       8
    A       2     2   20   -2    -2       5
    B       3     1   69    0     0       8
    On mesure pour chaque client, par mois, le nombre d'articles, le CA (hors avoir), le montant global des avoirs, le montant des avoirs avec cause "DEF" et le port.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    REQUETE
    Select T2.CLIENT,Count(T2.ARTICLE) as 'NBART',T2.MOIS,
      (Select sum(T2.CA) from matable2 as T2 where T2.TYPFAC='FAC') as 'CA',
      (Select sum(T2.CA) from matable2 as T2 where T2.TYPFAC='AVOIR')as 'RENDU',(Select sum(T2.CA) from matable2 as T2 where T2.TYPFAC='AVOIR' AND T2.TYPERREUR='DEF') as 'RENDUDEF',sum(T1.PORT)
    From matable2 as T2
     Left Outer Join matable1 as T1
     On T2.MOIS=T1.MOIS and T2.CLIENT=T1.CLIENT
    Group by T2.CLIENT
    Merci d'avance pour votre aide.

    Vincent.

  2. #2
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Je ne comprends pas bien ton problème, j'ai juste adapté "plus au moins" ta requête. Elle n'est pas bien optimisée, mais elle répond à ton besoin :
    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
     
    DEV)>select * from table1
      2  ;
     
    ARTICLE          MOIS C       PORT
    ---------- ---------- - ----------
    FRUIT               1 A          3
    LEGUME              1 A          5
    LEGUME              2 A          5
    FRUIT               1 B          6
    LEGUME              1 B          2
     
    DEV1> select * from table2;
     
    ARTICLE          MOIS CLIENT     TYPFA TYP         CA
    ---------- ---------- ---------- ----- --- ----------
    FRUIT               1 A          FAC               12
    FRUIT               1 A          FAC               12
    FRUIT               1 A          AVOIR DEF         -5
    FRUIT               1 A          AVOIR HS          -2
    LEGUME              1 A          FAC               20
    LEGUME              2 A          FAC               20
    FRUIT               2 A          AVOIR DEF         -2
    FRUIT               1 B          FAC               20
    FRUIT               1 B          FAC               32
    LEGUME              1 B          FAC               17
    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
    DEV1)>SELECT T2.CLIENT,
          COUNT(T2.ARTICLE)   NBART,
          T2.MOIS,
          (SELECT SUM(T2.CA) FROM  table2   T2 WHERE T2.TYPFAC='FAC'
          ) CA,
          (SELECT SUM(T2.CA) FROM  table2   T2 WHERE T2.TYPFAC='AVOIR'
          ) RENDU,
          (SELECT SUM(T2.CA)
          FROM  table2   T2
         WHERE T2.TYPFAC ='AVOIR'
         AND T2.TYPEeRREUR='DEF'
         ) RENDUDEF,
         SUM(T1.PORT)
       FROM  table2             T2
       LEFT OUTER JOIN table1  T1
       ON T2.MOIS   =T1.MOIS
       AND T2.CLIENT=T1.CLIENT
       GROUP BY T2.CLIENT, t2.mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CLIENT          NBART       MOIS         CA      RENDU   RENDUDEF SUM(T1.PORT)
    ---------- ---------- ---------- ---------- ---------- ---------- ------------
    A                   2          2        133         -9         -7           10
    B                   6          1        133         -9         -7           24
    A                  10          1        133         -9         -7           40
    Cdlt,
    LBO72.

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 69
    Par défaut
    Merci pour l'intérêt que tu portes à mon problème.

    Le résultat de ta requête est bizarre car il multiplie les quantité d'article par le nombre d'articles ayant du port etc..

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu dis ceci :
    On mesure pour chaque client, par mois
    Et tu fais cela :
    => Il manque le groupage par mois !

    Et pas besoin de sous-requête je pense :
    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
    SELECT T2.CLIENT, T2.MOIS,
        COUNT(DISTINCT T2.ARTICLE) AS nb_articles,
        SUM(
            CASE
                WHEN T2.TYPFAC = 'FAC' THEN CA
            END
        ) AS total_CA_FAC,
        SUM(
            CASE
                WHEN T2.TYPFAC = 'FAC' THEN CA
            END
        ) AS global_avoirs,
        SUM(
            CASE
                WHEN T2.TYPERREUR = 'DEF' THEN CA
            END
        ) AS total_DEF,
        SUM(T1.PORT) AS total_port
     
    FROM TABLE2 T2
    LEFT OUTER JOIN TABLE1 T2 ON T1.CLIENT = T2.CLIENT AND T1.MOIS = T1.MOIS
     
    GROUP BY T2.CLIENT, T2.MOIS
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Trés bien vu CinePhil :-)

Discussions similaires

  1. Requête et sous requête
    Par 501darts dans le forum Développement
    Réponses: 1
    Dernier message: 21/02/2008, 10h53
  2. intégré une sous requête dans une requête
    Par Smix007 dans le forum SQL
    Réponses: 13
    Dernier message: 25/06/2007, 11h45
  3. inclure une sous requête dans une requête
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/05/2007, 19h12
  4. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  5. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14

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