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

MS SQL Server Discussion :

Requête à partir de deux tables


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 15
    Par défaut Requête à partir de deux tables
    Bonjour à tous, mes connaissances en sql sont vraiment des connaissances de base, et je bloque sur un problème de jointure.

    Je travaille sur une base hébergé sur un SQL Server 2005. Je cherche à regrouper des informations qui se trouvent dans 2 tables distinctes.
    La première me permet de récupérer le nom du(des) donneur d'ordre et le nombre d'ordre de préparation émis par ce donneur d'ordre. La seconde me permet de retrouver le nombre de lignes contenu dans un ordre de preparation.
    J'aimerais obtenir un résultat de la forme
    Donneur d'ordre | nn ordre de prepa | nb total de ligne

    Le nb total de ligne représente le nombre total de ligne contenu dans chaque ordre de préparation.

    Je dispose de 4 données communes entre mes deux tables, à savoir le nom de l'activité, le nom de l'entrepôt et les numéro d'ordre de préparation (sur 2 colonnes).

    Merci d'avance pour toutes vos réponses.

  2. #2
    Membre averti Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut
    Bonjour,

    tu pourrais tenter une requète du genre :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select A.Donneur d'ordre ,A.nn ordre de prepa , COUNT(*)
      FROM table1 A, TABLE2 B
      WHERE A.nn ordre de prepa = B.nn ordre de prepa
      GROUP BY A.Donneur d'ordre ,A.nn ordre de prepa ;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 15
    Par défaut
    Merci de ta réponse Macfurp, je viens de tester ta requête mais le resultat ne répond pas totalement à mes attentes. J'obtiens bien l'ensemble des donneurs d'ordre et les commandes passées, mais le nombre de ligne correspondant au commande n'est pas cohérent.

    J'ajoute quelques infos complémentaires, celà pourra peut-être aider.
    Table donneur d'ordre : OF001 a passé 3 commandes
    174 OF001
    4 OF001
    5 OF001

    Table des lignes par commandes :
    Pour la commande 174 : 3 lignes
    174 100
    174 200
    174 300
    Pour la commande 4 : 2 lignes
    2 100
    2 200
    Pour la commande 5 : 1 ligne

    Je souhaiterais obtenir quelque chose comme ça pour OF001
    OF001 174 3
    OF001 2 2
    OF001 5 1

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    La réponse donnée précédemment par Macfurp est correcte.
    Ne tenez pas compte des deux premiers éléments, ils ne sont là que pour similer vos données :
    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
    With Ordre (c_id, donneur) AS
    (
    select 174, 'OF001' union all
    select   4, 'OF001' union all
    select   5, 'OF001'
    )
      ,  Commandes (c_id, col) AS
    (
    select 174, 100 union all
    select 174, 200 union all
    select 174, 300 union all
    select   4, 100 union all
    select   4, 200 union all
    select   5, 100
    )
      select O.donneur, O.c_id, count(*) as nb_commandes
        from Ordre as O
             inner join Commandes as C
               on C.c_id = O.c_id
    group by O.donneur, O.c_id
    order by nb_commandes desc;
     
    donneur c_id        nb_commandes
    ------- ----------- ------------
    OF001   174         3
    OF001   4           2
    OF001   5           1

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 15
    Par défaut
    Merci de ta réponse Waldar, effectivement la requête est correcte. Mais il doit manquer quelque chose dans les infos que je vous fournis. Voilà ce que je lance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select a.OECDDO AS D_ORDRE, a.OENODP AS N_ODP, count(*) as TOTAL_LIGNE 
    from HLODPEP a
    inner join HLODPLP b
    on a.OENODP = b.OLNODP and 
    where a.OECACT='CODE.DEPOT'
    GROUP BY a.OECDDO, a.OENODP order by a.OECDDO
    J'obtiens differents résultats, je n'afficherais que celui en rapport avec l'exemple précédent (j'ai un total de 3141 lignes).
    OF001 5 470
    OF001 174 171
    OF001 4 424
    Alors que si je me réfère à la table HLODPLP j'ai bien 3 lignes pour la commande 172, 2 pour la 4 et 1 pour la 5 !
    Il y a sans doute un critère qui manque, mais je ne vois pas lequel !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Que donnent les requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
      FROM HLODPLP
     WHERE OLNODP in (4, 5, 174)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
      FROM HLODPEP
     WHERE OENODP in (4, 5, 174)
       AND OECACT = 'CODE.DEPOT'
    Mon petit doigt me dit que la première requête donne les résultats dont vous parlez (2, 1 et 3 lignes), mais que dans la seconde requête vous avez plusieurs fois l'OECDDO pour les mêmes commandes !

    Au hasard, 57 fois pour la commande 174, 212 pour la commande 2 et 470 pour la 5 !

    Si j'ai raison, ce sont soit les données de votre table, soit le modèle de votre base qui sont en cause.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/12/2013, 10h08
  2. Créer une table a partir de deux tables existantes
    Par Aguiran dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/12/2006, 08h16
  3. Requete Delete à partir de deux tables
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 09/10/2006, 10h22
  4. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  5. création de requète à partir de 2 tables
    Par cheucheu dans le forum Access
    Réponses: 4
    Dernier message: 14/12/2005, 16h49

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