+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre actif
    Inscrit en
    septembre 2007
    Messages
    656
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 656
    Points : 195
    Points
    195

    Par défaut Faire un select de deux enregistrements sur une seule ligne de résultat

    Bonjour à tous
    (je préviens les requêtes et moi ça fait 2)
    J'ai 2 tables :
    table LIGNES :
    NUMLIGNE-NUMDOC-ARTICLE-PRIX-QTE-INFO1-NUMCONT
    1-BC00010-VELO-1000,00-5-luxe-784
    2-BC00054-SARDINE-20,00-1-real- -
    3-FA08264-VELO-700,00-5-luxe-783
    ...

    table CMLIENS :
    NUMINT-NUMCONTOUT-NUMCONTIN
    1-550-549
    2-784-783
    ...

    J'ai besoin de sortir, depuis la tables LIGNES, tous les enregistrements qui contiennent un NUMCONT
    mais aussi leur lien (indiqué dans la table CMLIENS) sur 1 seule ligne

    exemple à partir des tables ci-dessus :
    je voudrais obtenir :
    NUMLIGNE-NUMDOC-ARTICLE-PRIX-QTE-INFO1-NUMCONT-
    1-BC00010-VELO-1000,00-5-luxe-784-3-FA08264-VELO-700,00-5-luxe-783
    J'ai essayé un :
    Code :
    SELECT * FROM CMILIENS INNER JOIN LIGNES ON CMLIENS.NUMCONTOUT = LIGNES.NUMCONT
    Mais je n'obtiens pas le résultat attendu.
    J'ai l'impression que je devrais faire une sorte de double INNER JOIN sur CMLIENS.NUMCONTOUT = LIGNES.NUMCONT et sur CMLIENS.NUMCONTIN = LIGNES.NUMCONT
    Mais comment obtenir le tout sur une seule ligne ?

    Je suis nul en requête. Si quelqu'un pouvait m'aider ?


    Merci aux courageux
    Bonnes fêtes à tous.
    Thib

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 917
    Points : 14 384
    Points
    14 384

    Par défaut

    Vous étiez bien parti, il faut refaire une autre jointure sur la même table des lignes :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    With LIGNES (NUMLIGNE, NUMDOC, ARTICLE, PRIX, QTE, INFO1, NUMCONT) as
    (
    select 1, 'BC00010', 'VELO'   , 1000, 5, 'luxe',  784 union all
    select 2, 'BC00054', 'SARDINE',   20, 1, 'real', null union all
    select 3, 'FA08264', 'VELO'   ,  700, 5, 'luxe',  783
    )
      ,  CMLIENS (NUMINT, NUMCONTOUT, NUMCONTIN) as
    (
    select 1, 550, 549 union all
    select 2, 784, 783
    )
      select l1.NUMLIGNE, l1.NUMDOC, l1.ARTICLE, l1.PRIX, l1.QTE, l1.INFO1, l1.NUMCONT
           , l2.NUMLIGNE, l2.NUMDOC, l2.ARTICLE, l2.PRIX, l2.QTE, l2.INFO1, l2.NUMCONT
        from CMLIENS as cl
        join LIGNES  as l1 on l1.NUMCONT = cl.NUMCONTOUT
        join LIGNES  as l2 on l2.NUMCONT = cl.NUMCONTIN
    order by cl.numint asc;
     
    NUMLIGNE    NUMDOC  ARTICLE PRIX        QTE         INFO1 NUMCONT     NUMLIGNE    NUMDOC  ARTICLE PRIX        QTE         INFO1 NUMCONT
    ----------- ------- ------- ----------- ----------- ----- ----------- ----------- ------- ------- ----------- ----------- ----- -----------
    1           BC00010 VELO    1000        5           luxe  784         3           FA08264 VELO    700         5           luxe  783

  3. #3
    Membre actif
    Inscrit en
    septembre 2007
    Messages
    656
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 656
    Points : 195
    Points
    195

    Par défaut

    d'abord un grand merci pour votre réponse et aussi l'encouragement .
    Je vais tester et essayer de la comprendre.
    Bonnes f^tes
    Thib

  4. #4
    Membre actif
    Inscrit en
    septembre 2007
    Messages
    656
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 656
    Points : 195
    Points
    195

    Par défaut

    Oups ! désolé mais je n'arrive pas à l'appliquer
    Si je l'utilise par copier-coller , elle marche.
    Si j'essaye de remplacer les valeurs en dures par les noms de mes champs, cela ne marche plus.
    Par exemple j'ai mis : (j'ai mis mes vrais noms de champs et j'en ai enlevé d'autres pour essayer de simplifier et de trouver comment l'adapter
    WITH F_DOCLIGNE (DO_Piece, AR_Ref, DL_Qte, DL_No) AS
    (
    SELECT 1, DO_Piece,AR_Ref,DL_Qte,DL_No union ALL
    SELECT 2, DO_Piece,AR_Ref,DL_Qte,DL_No union ALL
    SELECT 3, DO_Piece,AR_Ref,DL_Qte,DL_No

    )

    )

    Bref, comment je dois faire pour ne pas avoir des valeurs en dures mais une lecture des tables ?

    Merci
    Thib

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    août 2009
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : août 2009
    Messages : 624
    Points : 1 040
    Points
    1 040

    Par défaut

    Si tu utilises des noms de colonnes, il faut aussi lui préciser dans quelles tables (schéma) elles se trouvent :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    WITH F_DOCLIGNE (DO_Piece, AR_Ref, DL_Qte, DL_No) AS
    (
    SELECT 1, DO_Piece,AR_Ref,DL_Qte,DL_No FROM MATABLE1 union ALL
    SELECT 2, DO_Piece,AR_Ref,DL_Qte,DL_No FROM MATABLE2 union ALL
    SELECT 3, DO_Piece,AR_Ref,DL_Qte,DL_No FROM MATABLE3
     
    )
     
    )
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 917
    Points : 14 384
    Points
    14 384

    Par défaut

    Le contenu des clauses WITH me sert à générer un jeu de test puisque je n'ai pas votre base de données sous la main.

    Pour vous il suffit d'adapter la requête à partir du select en ligne 12 à vos tables et colonnes réelles.

  7. #7
    Membre actif
    Inscrit en
    septembre 2007
    Messages
    656
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 656
    Points : 195
    Points
    195

    Par défaut

    désolé pour le temps de retour (j'étais malade)


    Un très grand merci à vous tous !
    J'ai enlevé le WITH et mis mes vrais noms de champs : cela marche nickel


    Bonne année à tous les gens qui passent ici.
    Thibault

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •