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

Langage SQL Discussion :

Fusion d'enregistrements par requête


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut Fusion d'enregistrements par requête
    Bonjour!

    J'aimerais savoir s'il est possible d'avoir par une requête, en un enregistrement des informations contenues dans deux enregistrements, comme suit:

    Table [BONS]
    ___________________________________________

    Num ----- OT ------- Reference ------- Type
    ___________________________________________

    1 --------- 1 -------- 01/CB/07 -------- 'Aller'
    2 --------- 1 -------- 02/CB/07 -------- 'Retour'

    Ainsi, j'aimerais avoir grâce à une requête, un résultat qui ressemble à celui-ci:

    _________________________________________

    OT ------- Bon_Aller ------ Bon_Retour
    _________________________________________

    1 -------- 01/CB/07 -------- 02/CB/07

    Est-ce possible?
    Si oui, j'aimerais savoir comment?

    Merci d'avance!

  2. #2
    Membre du Club Avatar de medtun.net
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par GodGives Voir le message
    Bonjour!
    J'aimerais savoir s'il est possible d'avoir par une requête, en un enregistrement des informations contenues dans deux enregistrements,
    try this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT champ1 + champ2
    FROM maTable
    tu peux même insérer un espace entre les 2 champs,
    try this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT champ1 + ' ' + champ2
    FROM maTable

  3. #3
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    Je ne suis pas sûr de la réponse de medtun.net. Je pencherai pour une jointure de la table sur elle-même, un truc ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.OT, T1.Reference AS Bon_Aller, T2.Reference AS Bon_Retour
    FROM Bons T1
      JOIN Bons T2 ON T1.OT = T2.OT AND T2.Type = 'Retour'
    WHERE T1.Type = 'Aller'
    ORDER BY T1.OT
    Bon, maintenant il faut prévoir les cas où il y a un bon_aller et pas de bon_retour, ainsi que l'inverse. Un cross join pourrait résoudre le problème je pense.

    Cordialement

  4. #4
    Membre du Club Avatar de medtun.net
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par elbj Voir le message
    Je ne suis pas sûr de la réponse de medtun.net.
    1) je pense que tu dois tout d'abord tester la requête pour que tu sera sûr.
    2) j'ai répondu à la première partie de la question :
    Citation Envoyé par GodGives Voir le message
    J'aimerais savoir s'il est possible d'avoir par une requête, en un enregistrement des informations contenues dans deux enregistrements, comme suit:
    3) merci

  5. #5
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Envoyé par medtun.net
    tu peux même insérer un espace entre les 2 champs,
    try this :
    Ceci n'est possible que lorsque les deux champs sont distincts dans l'enregistrement c'est un champ1 et un autre champ2.

    Ici, il s'agit d'un même champ 'Référence' que je veux avoir en deux autres champs en fonction de la valeur de 'Type'.

  6. #6
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    La solution de elbj marche.

    Voyons si cela peut aussi marcher lorsqu'on a pas de retour.

  7. #7
    Membre du Club Avatar de medtun.net
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 60
    Points
    60
    Par défaut
    oui oui oui...
    seulement moi je me suis intéréssé à la première ligne de ta question...
    j'aurais du lire la totalité.. pour comprendre ton problème

  8. #8
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Merci medtun.net

    Sans le retour, j'ai pas de résultat.

    Envoyé par elbj
    Bon, maintenant il faut prévoir les cas où il y a un bon_aller et pas de bon_retour, ainsi que l'inverse. Un cross join pourrait résoudre le problème je pense.
    Comment peut-on faire la jointure croisée de manière à l'avoir?

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 119
    Points : 31 627
    Points
    31 627
    Billets dans le blog
    16
    Par défaut
    Pour aller dans le sens de elbj, vous pouvez aussi envisager quelque chose qui ressemble à ce qui suit
    (j'ai changé le nom de la colonne Type en leType, car "Type" est un mot réservé) :


    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
    Select Distinct a.OT, a.Reference as Bon_Aller, b.Reference as Bon_Retour
    from   Bons a
         , Bons b
    where a.OT = b.OT
    and   a.Reference < b.Reference
    Union 
    Select  Distinct a.OT, a.Reference as Bon_Aller, 'sans retour' Bon_Retour
    from    Bons a
    where   a.leType = 'aller'  
      and  not exists (select * 
                       from   Bons b
                       where  b.leType = 'retour'
                       and  a.OT = b.OT 
                    )
    Union
    Select  Distinct a.OT, a.Reference as Bon_Aller, 'sans aller' Bon_Retour
    from    Bons a
    where   a.leType = 'retour'  
      and  not exists (select * 
                       from   Bons b
                       where  b.leType = 'aller'
                       and  a.OT = b.OT 
                    )
    ;

  10. #10
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Même avec Type au lieu de letype, la requête de fsmrel marche parfaitement mais avec de petites modifications.

    Dans la dernière union, on aura plutôt 'sans aller' au lieu de 'sans retour' comme suit:

    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
     
    SELECT DISTINCT a.OT, a.Reference AS Bon_Aller, b.Reference AS Bon_Retour
    FROM   Bons a
         , Bons b
    WHERE a.OT = b.OT
    AND   a.Reference < b.Reference
    Union 
    SELECT  DISTINCT a.OT, a.Reference AS Bon_Aller, 'sans retour' Bon_Retour
    FROM    Bons a
    WHERE   a.leType = 'aller'  
      AND  NOT EXISTS (SELECT * 
                       FROM   Bons b
                       WHERE  b.leType = 'retour'
                       AND  a.OT = b.OT 
                    )
    Union
    SELECT  DISTINCT a.OT, a.Reference AS Bon_Retour, 'sans aller' Bon_Aller
    FROM    Bons a
    WHERE   a.leType = 'retour'  
      AND  NOT EXISTS (SELECT * 
                       FROM   Bons b
                       WHERE  b.leType = 'aller'
                       AND  a.OT = b.OT 
                    )
    ;

    Merci et meilleurs voeux de nouvel an à tous!!!

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

Discussions similaires

  1. [AC-2003] Requête sélection dernier enregistrement par client
    Par Me.Leti dans le forum IHM
    Réponses: 2
    Dernier message: 08/08/2011, 17h30
  2. Modifier ou supprimer un enregistrement par une requête SQL
    Par afatdz dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/09/2008, 10h01
  3. Requête extraire n enregistrements par groupe lente
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 51
    Dernier message: 04/03/2008, 19h24
  4. Réponses: 0
    Dernier message: 19/12/2007, 11h22
  5. requête : dernier enregistrement par personne
    Par Mélodicia dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/09/2006, 19h09

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