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

Développement SQL Server Discussion :

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


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Vous étiez bien parti, il faut refaire une autre jointure sur la même table des lignes :
    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
    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
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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 éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    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 : 623
    Points : 1 049
    Points
    1 049
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    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
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    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.

Discussions similaires

  1. [AC-2003] Plusieurs enregistrements sur une seule ligne
    Par romainrogo dans le forum IHM
    Réponses: 22
    Dernier message: 20/11/2015, 12h30
  2. [XL-2003] Plusieurs enregistrements sur une seule ligne
    Par romainrogo dans le forum Excel
    Réponses: 2
    Dernier message: 16/01/2014, 11h09
  3. Mettre deux div sur une seule ligne
    Par bella1 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 13/10/2011, 12h36
  4. [OS X] [Bash 3] Deux echo sur une seule ligne
    Par d10g3n dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 22/06/2008, 15h58
  5. enregistrements sur une seul ligne d'une zone de texte
    Par maverick91 dans le forum Access
    Réponses: 5
    Dernier message: 12/06/2007, 12h35

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