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

    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 Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 821
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    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 821
    Points : 13 500
    Points
    13 500

    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
    655
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 655
    Points : 174
    Points
    174

    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
    655
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 655
    Points : 174
    Points
    174

    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 émérite
    Homme Profil pro Grégory Boge
    Administrateur de base de données
    Inscrit en
    août 2009
    Messages
    579
    Détails du profil
    Informations personnelles :
    Nom : Homme Grégory Boge
    Localisation : France

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

    Informations forums :
    Inscription : août 2009
    Messages : 579
    Points : 876
    Points
    876

    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 | GUSS.pro | Kankuru (logiciel gratuit pour SQL Server)

  6. #6
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 821
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    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 821
    Points : 13 500
    Points
    13 500

    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
    655
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 655
    Points : 174
    Points
    174

    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
  •