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

SQLite Discussion :

Select entre 2 tables en ayant 2 colonnes à jointer


Sujet :

SQLite

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Select entre 2 tables en ayant 2 colonnes à jointer
    Bonjour, j'ai à m'occuper de suivre l'inventaire chez les clients, des bouteilles de gaz comprimés (Ex.: Oxygène, Argon).
    Le produit à l'intérieur est vendu mais la bouteille est louée. Donc lors des livraisons des bouteilles, il faut tenir compte
    des bouteilles pleines que nous laissons et les vides que nous reprenons. Pour maintenir l'inventaire à jour, je dois obtenir la quantité
    à la plus récente date, soit QteApres pour chaque produit(nobout) et pour chaque client.
    C'est donc que j'ai à lier le numc(Id Client, le no de bouteille et et la date la plus récente. J'ai essayé quelques commandes Select tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select C.numc, C.nobout, E.qapres, E.ref FROM loycont C  
      INNER JOIN Loyliv E ON E.numc = C.numc AND E.nobout = C.nobout  
      WHERE C.numc = @vnumc   ORDER BY nobout
    Aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select C.numc, DISTINCT C.nobout, E.qapres, MAX(E.ref) FROM loycont C  
                INNER JOIN Loyliv E ON E.numc = C.numc AND E.nobout = C.nobout  
    WHERE C.numc = @vnumc  GROUP BY E.nobout ORDER BY nobout
    sans succès.
    Quelqu'un aurait une idée ?. Merci à l'avance. Fichier Excel joint.LocBout1.xlsx

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    C'est donc que j'ai à lier le numc(Id Client, le no de bouteille et la date la plus récente).[/QUOTE]
    À lier ! Pourquoi ? Quand je regarde les données du jeu d'essai (je n'aime pas trop avoir comme média un .xlsx il aurait été plus simple de mettre les données directement)
    Voilà pour les futurs lecteurs *en gras les données à extraire
    (même si ce n'est pas parfait)
    Table des Livraisons des Bouteilles LOYLIV
    Ref Date Numc Nobout Vide Pleine QteApres
    20185 30/01/2020 125 30 2 3 1
    20186 30/01/2020 125 52 2 4 2
    22981 28/03/2020 125 30 3 4 2
    22982 28/03/2020 125 75 0 1 1
    28694 17/05/2020 125 30 3 2 1
    28695 30/01/2020 125 52 2 4 2
    28696 28/03/2020 125 75 1 2 2
    30125 12/08/2020 125 30 2 3 2
    30126 12/08/2020 125 52 3 3 2
    30127 12/08/2020 125 75 2 3 3
    45100 26/10/2020 125 30 2 3 3

    Table des Contrats de location LOYCONT
    Numc Nobout Qcont Qmain
    125 30 3 3
    125 52 2 2
    125 75 2 3

    Toutes les données semblent être dans la première table LOYCONT.

    Si Ref est un autoincrémenté alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(REF) R FROM LOYCONT GROUP BY  Nobout
    devrait donner la sélection.
    C'est ce que j'appellerais une "sous-requête" ou CTE
    Il est ensuite facile de lier cette sous requête pour obtenir les données
    solution sans CTE

    Là, je m'aventure sans filet (test) car :
    1- je suis plus à l'aise avec mon SGBD de prédilection
    2- j'ai la flemme de créer une table, remplir les données (c'est pour cela qu'un script de création de table et un ensemble de jeu d'essai sous forme de INSERT INTO .... est fortement apprécié sur les forums BDD)

    Je me lance, (je ne suis même pas sûr de la syntaxe)
    à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  L.Date,L.Numc,L.Nobout,L.QteApres FROM LOYCONT L 
         JOIN (SELECT MAX(REF) R FROM LOYCONT GROUP BY  Nobout) C ON L.REF=C.R 
    ORDER BY L.nobout
    je préfère de loin la forme "CTE"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH C AS (SELECT MAX(REF) R FROM LOYCONT GROUP BY  Nobout)  
    SELECT SELECT  L.Date,L.Numc,L.Nobout,L.QteApres FROM LOYCONT L 
         JOIN  C ON L.REF=C.R
    ORDER BY L.nobout
    Pour ne cibler qu'un seul client cela devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH C AS (SELECT MAX(REF) R FROM LOYCONT WHERE numc=@vnumc GROUP BY  Nobout)  
    SELECT SELECT  L.Date,L.Numc,L.Nobout,L.QteApres FROM LOYCONT L 
         JOIN  C ON L.REF=C.R
    ORDER BY L.nobout
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour SergioMaster,

    Merci de m'avoir répondu si rapidement.
    En fait il y a 2 tables.
    LOYCONT où la qté de bout. minimum que le client s'est engagé à long terme en location avec d'autres champs non montrés et l'autre ,
    LOYLIV sont les livraisons que ce client a reçu pendant l'année. Ces livraisons peuvent faire varier l'inventaire de bouteille en plus ou en moins.

    En gros j'ai besoin de présenter dans le dossier du client, à une date donnée, les sortes de bouteilles et leur inventaire, que le client a ou a déjà eu en sa possession.

    Je ne peux utiliser les commandes Select que tu as proposé p.q. seule 1 table avait été considérée.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut joindre 2 tables avec 2 colonnes jointées
    Bonjour SergioMaster,

    J'ai trouvé une solution. J'ai inversé les tables dans la commande SELECT. Plutôt que prendre Loycont comme table de base, j'ai utilisé Loyliv et JOIN sur numc et nobout dans Loycont
    Voici le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select  A.numc, DISTINCT A.nobout, C.nobt, B.qcont, MAX(A.ref), A.qapres 
    FROM Loyliv A INNER JOIN Loycont B ON B.numc=A.numc AND B.nobout = A.nobout 
    WHERE A.numc = @vnumc 
    GROUP BY A.nobout
    Merci pour ton temps.

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

Discussions similaires

  1. [SQL] Select sur 2 tables qui crée une colonne vide
    Par logiclogic dans le forum SAS Base
    Réponses: 10
    Dernier message: 10/05/2013, 19h32
  2. Difference entre ouvrir table et select
    Par Lancyo dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 25/10/2007, 15h35
  3. Selection ordonnée entre 2 tables
    Par boss_gama dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/07/2006, 09h42
  4. [SELECT] sélection croisée entre deux tables
    Par WriteLN dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/03/2005, 11h05
  5. Requete select pour récupérer les no match entre 2 tables
    Par Celina dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2003, 11h59

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