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 :

Requête pour résultats sur une seule ligne


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête pour résultats sur une seule ligne
    Bonjour,

    Soyez indulgent, je suis débutant en SQL.

    J'ai une requête qui me donne les résultats d'une course. J'ai une table qui me donne les infos sur le coureur, une sur ses résultats (départ, arrivée, temps) et une sur les temps de passages (qui peuvent en compter un nombre indéfini).

    J'aimerais que la requête me donne les résultats sur une seule ligne.

    ex:

    nom, départ, arrivée, split 1, split 2, final
    Simon, 9h00, 10h00, 9h15, 9h45, 1h00

    Ma requête actuel me donne ce résultats mais n'affiche pas ceux qui aurais abandonné la course avant le split 2. Elle se limite aussi à 2 temps de passage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT     RES.IdDetailResultat, RES.Depart, CP1.DateHeure AS Check1, CP2.DateHeure AS Check2, RES.Arrivee, dbo.View_Resultats.IdResultat, 
                          dbo.View_Resultats.IdParticipant, dbo.View_Resultats.IdEvenement, dbo.View_Resultats.IdEpreuve, dbo.Participants.Nom, dbo.Participants.Prenom, 
                          dbo.Participants.Sexe, dbo.Participants.Groupe, dbo.Participants.Dossard, dbo.Evenements.Nom AS Nom_event, dbo.Epreuves.Nom AS Nom_epreuve
    FROM         dbo.DetailResultats AS RES INNER JOIN
                          dbo.View_Resultats ON RES.IdResultat = dbo.View_Resultats.IdResultat INNER JOIN
                          dbo.Participants ON dbo.View_Resultats.IdParticipant = dbo.Participants.IdParticipant INNER JOIN
                          dbo.Evenements ON dbo.Participants.IdEvenement = dbo.Evenements.IdEvenement INNER JOIN
                          dbo.Epreuves ON dbo.View_Resultats.IdEpreuve = dbo.Epreuves.IdEpreuve INNER JOIN
                          dbo.CheckPoints AS CP1 ON RES.IdDetailResultat = CP1.IdDetailResultat INNER JOIN
                          dbo.CheckPoints AS CP2 ON RES.IdDetailResultat = CP2.IdDetailResultat AND CP2.DateHeure > CP1.DateHeure
    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 890
    Points : 53 122
    Points
    53 122
    Billets dans le blog
    6
    Par défaut
    Commencez par respecter la charte en postant le DDL de vos tables :
    http://www.developpez.net/forums/d96...vement-poster/

    A +

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Pour afficher les résultats pour ceux qui n'ont pas passé tous les checkpoints, faites des jointure externes pour CP1 et CP2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LEFT OUTER JOIN Checkpoint CP1 ON...
    LEFT OUTER JOIN CheckPoint CP2 ON...
    pour la limite a deux passages, combien avez vous de passages au maximum ?
    L'utilisation de PIVOT serait peut être plus simple, mais ne résoudra pas le problème du nombre de passage indéfini : vous ne pouvez pas faire une requete qui retourne un nombre variable de colonnes, à moins de générer dynamiquement votre requete et de l'exécuter ensuite, mais c'est très sale comme solution.
    Le mieux dans ce cas est de traiter ce problème au niveau de votre programme qui affiche les résultats, et donc une requete qui renvoi une ligne par checkpoint (ordonné par date/heure pour simplifier les choses !)

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    J'ai modifier la requête. Le résultats ajoute bien les participant qui ne passe pas au point 2 mais me double ceux qui ont fait le parcours complet. Une fois avec toute l'information et une deuxième fois avec le checkpoint 1 seulement avec le temps du 2 et null dans le checkpoint 2...

    Voici le résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    3458	2011-01-05 10:31:56.1638000	2011-01-05 10:55:56.1630000	NULL	NULL	1892	1898	32	21	Faucher	Martin	H	NULL	2	Devl test check point	Canot sur glace 
    3459	2011-01-05 10:31:41.3338000	2011-01-05 10:41:41.3330000	2011-01-05 10:58:41.3330000	NULL	1893	1899	32	21	Faucher	Simon	H	NULL	1	Devl test check point	Canot sur glace 
    3459	2011-01-05 10:31:41.3338000	2011-01-05 10:58:41.3330000	NULL	NULL	1893	1899	32	21	Faucher	Simon	H	NULL	1	Devl test check point	Canot sur glace 
    3460	2011-01-05 10:36:30.4638000	2011-01-05 10:55:30.4630000	NULL	NULL	1894	1900	32	21	Bouchard	MArie	F	NULL	3	Devl test check point	Canot sur glace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT 
                          RES.IdDetailResultat, RES.Depart, CP1.DateHeure AS Check1, CP2.DateHeure AS Check2, RES.Arrivee, dbo.View_Resultats.IdResultat, 
                          dbo.View_Resultats.IdParticipant, dbo.View_Resultats.IdEvenement, dbo.View_Resultats.IdEpreuve, dbo.Participants.Nom, dbo.Participants.Prenom, 
                          dbo.Participants.Sexe, dbo.Participants.Groupe, dbo.Participants.Dossard, dbo.Evenements.Nom AS Nom_event, dbo.Epreuves.Nom AS Nom_epreuve
    FROM         dbo.DetailResultats AS RES INNER JOIN
                          dbo.View_Resultats ON RES.IdResultat = dbo.View_Resultats.IdResultat INNER JOIN
                          dbo.Participants ON dbo.View_Resultats.IdParticipant = dbo.Participants.IdParticipant INNER JOIN
                          dbo.Evenements ON dbo.Participants.IdEvenement = dbo.Evenements.IdEvenement INNER JOIN
                          dbo.Epreuves ON dbo.View_Resultats.IdEpreuve = dbo.Epreuves.IdEpreuve LEFT OUTER JOIN
                          dbo.CheckPoints AS CP1 ON RES.IdDetailResultat = CP1.IdDetailResultat LEFT OUTER JOIN
                          dbo.CheckPoints AS CP2 ON RES.IdDetailResultat = CP2.IdDetailResultat AND CP2.IdCheckPoint > CP1.IdCheckPoint
    Voici mes tables:

    table Detailsresultats:
    iddetailsresultats
    idresultat
    idevenement
    depart
    arrivée
    rang
    sequence

    Table CheckPoint:
    idcheckpoint
    iddetailresultat
    dateheure

    Merci de votre aide


Discussions similaires

  1. Afficher les résultats sur une seule ligne
    Par arnovodao dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/07/2013, 14h49
  2. Requête deux résultats sur une même ligne
    Par delaio dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/02/2012, 12h10
  3. Regroupement de résultats sur une seul ligne
    Par ximun974 dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/12/2010, 12h55
  4. Plusieurs résultats sur une seule ligne
    Par Morphorpse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/08/2007, 19h36
  5. Relation un à n : mettre les résultats sur une seule ligne
    Par juju33 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 13/08/2007, 09h57

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