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 :

Select sur deux tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Select sur deux tables
    Bonjour,
    Question de débutant (j'ai cherché sur le forum sans résultat)
    J’ai deux tables.
    1/ Table 1 (activité): clef primaire = LADATE+LECONDUCTEUR+LEVEHICULE
    Cette table contient entre le KMJOUR.

    2/ Table2 (prise de carburant): Clef Primaire : AutoIncrément
    Contient : LADATE, LECONDUCTEUR,LEVEHICULE
    Mais aussi LITREDUPLEIN

    Chaque clef de la table1 peut avoir 0, 1 ou plusieurs enregistrements correspondant dans la table2.
    A chaque enregistrement table2 correspond, un et un seul enregistrement table1.

    Je recherche le SQL permettant :
    A/
    D’obtenir un tableau :

    LADATE – LECONDUCTEUR – LEVEHICULE – KMJOUR – Sum(LITREDUPLEIN)*

    * 0 si pas de plein/le plein/somme des pleins du jour pour le Conducteur/vehicule.

    Avec-->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select J_DATE,J_CHAUFFEUR,J_CAMION,J_KM_JOUR
    from JOURNEE
    UNION
    select J_DATE,J_CHAUFFEUR,J_CAMION,sum(LITRE_PG) 
    from PRISE_GAZOLE
    group by J_DATE,J_CHAUFFEUR,J_CAMION
    J’obtiens l’info sur deux lignes
    LADATE – LECONDUCTEUR – LEVEHICULE – KMJOUR
    LADATE-– LECONDUCTEUR – LEVEHICULE –Sum(LITREDUPLEIN)



    B/
    Un tableau des sommes entre dates
    LECONDUCTEUR – sum(KMJOUR)- Sum(LITREDUPLEIN)


    Merci de votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut
    1- Je créerais une 'fausse table' qui contiendrait une somme par date-conducteur-véhicule des litres de carburant, puis je la lierais avec ma table principale.

    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
     
    select a.J_DATE, 
             a.J_CHAUFFEUR, 
             a.J_CAMION, 
             a.J_KM_JOUR, 
             b.SUM_GASOIL
    from JOURNEE a, (select c.J_DATE,
                                     c.J_CHAUFFEUR, 
                                     c.J_CAMION, 
                                     SUM(c.LITREDUPLEIN)
                            from PRISE_GAZOLE c
                            group by c.J_DATE, c.J_CHAUFFEUR, c.J_CAMION) b
    where a.J_DATE=b.J_DATE
    and    a.J_CHAUFFEUR=b.J_CHAUFFEUR
    and    a.J_CAMION=b.J_CAMION
    2 - idem mais 2 fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select a.J_CHAUFFEUR, 
             a.SUM_KM_JOUR, 
             b.SUM_GASOIL
    from (select c.J_CHAUFFEUR, SUM(c.J_KM_JOUR) 
            FROM JOURNEE c
            group by c.J_CHAUFFEUR) a, 
            (select d.J_CHAUFFEUR, SUM(d.LITREDUPLEIN)
             from PRISE_GAZOLE d
             group by c.J_CHAUFFEUR) b
    where a.J_CHAUFFEUR=b.J_CHAUFFEUR
    Je ne suis pas sûr que cela soit le plus optimal... mais bon j'pense bien que cela fonctionne

  3. #3
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Quand on veut interroger deux tables reliées, il faut faire une jointure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT j.J_DATE, j.J_CHAUFFEUR, j.J_CAMION, j.J_KM_JOUR, SUM(pg.LITRE_PG) AS Somme_litres
    FROM JOURNEE AS j
    LEFT OUTER JOIN PRISE_GAZOLE AS pg 
      ON pg.PG_DATE = j.J_DATE
      AND pg.PG_CHAUFFEUR = J_CHAUFFEUR
      AND pg.PG_CAMION = J_CAMION
    GROUP BY j.J_DATE, j.J_CHAUFFEUR, j.J_CAMION, j.J_KM_JOUR
    Voilà pour le 1. Je te laisse chercher un peu pour le 2.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Super ! ça marche ! !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête "select" sur deux tables dont une vide
    Par Torgar dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/10/2009, 10h27
  2. Select sur deux tables, résultat formaté
    Par Warluck dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/12/2008, 20h45
  3. Requete mysql : select sur deux tables
    Par IP-Fix dans le forum Requêtes
    Réponses: 9
    Dernier message: 12/11/2008, 17h03
  4. SELECT sur deux tables
    Par Gaetch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/07/2007, 16h40
  5. Select sur deux tables
    Par DJuL- dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/03/2007, 15h40

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