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

MS SQL Server Discussion :

Sous requête SQL


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut Sous requête SQL
    Bonjour,

    J'ai un problème pour faire ma sous-requête. En faite je voudrais fusionner ces deux requêtes, pour cela je sais qu'il faut passer par une sous-requête, mais je n'y arrive pas du tout, elle est trop complexe pour moi... Est-ce que quelqu'un pourrait m'aider ? Et m'expliquer en même temps pour que je sois capable de le refaire par la suite svp.

    Requête 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT (util.nomUTIL + ', ' + util.prenomUTIL) AS nomEntraineur, (niv.nomNIV + ' ' + gr.nomGROU) AS nomGroupe
    FROM Utilisateur util
    JOIN Entraineur ent ON
    	ent.idUTIL = util.idUTIL
    JOIN EntraineurGroupe egr ON
    	egr.idENT = ent.idENT
    JOIN Groupe gr ON
    	gr.idGROU = egr.idGROU
    JOIN Niveau niv ON
    	niv.idNIV = gr.idNIV
    ORDER BY (util.nomUTIL + ', ' + util.prenomUTIL), (niv.nomNIV + ' ' + gr.nomGROU)

    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT (niv.nomNIV + ' ' + gr.nomGROU) AS nomGroupe, (gym.nomGYMN + ', ' + gym.prenomGYMN) AS nomGymnaste
    FROM Groupe gr
    JOIN Niveau niv ON
    	niv.idNIV = gr.idNIV
    JOIN MembreGroupe mgr ON
    	mgr.idGROU = gr.idGROU
    JOIN Gymnaste gym ON
    	gym.idGYMN = mgr.idGYMN
    ORDER BY (niv.nomNIV + ' ' + gr.nomGROU), (gym.nomGYMN + ', ' + gym.prenomGYMN)


    Mini_Croco

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    1) respectez la charte de postage http://www.developpez.net/forums/d96...vement-poster/
    2) nous dire ce que vous voulez obtenir... Nous avons perdu la boule de cristal !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour,

    A partir de SQL 2005, une telle requête devrait répondre à votre besoin :
    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
     
    SELECT (util.nomUTIL + ' ' + util.prenomUTIL) AS nomEntraineur, (COALESCE(niv.nomNIV, '') + ' ' + COALESCE(gr.nomGROU, '')) AS nomGroupe, 
    COALESCE((STUFF((
    	SELECT ',' + (gym.nomGYMN + ' ' + gym.prenomGYMN)
    	FROM Groupe gr2
    	INNER JOIN Niveau niv2 ON niv2.idNIV = gr2.idNIV
    	INNER JOIN MembreGroupe mgr ON	mgr.idGROU = gr2.idGROU
    	INNER JOIN Gymnaste gym ON	gym.idGYMN = mgr.idGYMN 
    	WHERE gr2.idGROU = COALESCE(gr.idGROU, -1)
    	ORDER BY (gym.nomGYMN + ', ' + gym.prenomGYMN)
    	FOR XML PATH(''), TYPE, ROOT).value('root[1]','NVARCHAR(MAX)'),1,1,'') 
    ), '') AS ListeGymnastes   
    FROM Utilisateur util
    LEFT OUTER JOIN Entraineur ent ON ent.idUTIL = util.idUTIL
    LEFT OUTER JOIN EntraineurGroupe egr ON	egr.idENT = ent.idENT
    LEFT OUTER JOIN Groupe gr ON gr.idGROU = egr.idGROU
    LEFT OUTER JOIN Niveau niv ON niv.idNIV = gr.idNIV
    ORDER BY (util.nomUTIL + ' ' + util.prenomUTIL), (COALESCE(niv.nomNIV, '') + ' ' + COALESCE(gr.nomGROU, ''))
    La colonne ListeGymnastes contient la liste des gymnastes appartenant au groupe. Le séparateur est la virgule.

    Les COALESCE servent à traiter les NULL.

    Cordialement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut
    Bonjour,

    J'avais lu la charte mais j'ai oublié de rajouter le SQL2012 désolée. Pour le résultat, en faite je veux obtenir le nom de l'entraineur, le nom du groupe qu'il entraine et le nom des gymnastes rattachés à ce groupe.

    amedee, je te remercie de ton aide, mais ça ne fonctionne pas (peut être dû à la version j'ai la 2012) :/ J'ai mis un screen du résultat


    Merci de votre aide
    Mini_Croco
    Images attachées Images attachées  

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut
    S'il vous plaît, j'ai vraiment besoin d'aide

  6. #6
    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
    Par défaut
    Bonjour,

    Vous ne nous avez toujours pas dit ce que vous vouliez obtenir !
    indiquez :
    - la structure de vos tables
    - un exemple de leur contenu

    et surtout :
    - le résultat souhaité

    Ce sera surement plus explicite.


    Citation Envoyé par Mini_Croco Voir le message
    amedee, je te remercie de ton aide, mais ça ne fonctionne pas
    Si vous étiez plus précis, nous pourrions l'être également.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour,

    D'après la copie d'écran, la requête fonctionne, sinon il y aurait un message d'erreur. Testez celle-ci. Je l'ai juste un peu modifiée :
    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
     
    SELECT (util.nomUTIL + ' ' + util.prenomUTIL) AS nomEntraineur, (COALESCE(niv.nomNIV, '') + ' ' + COALESCE(gr.nomGROU, '')) AS nomGroupe, 
    COALESCE((STUFF((
        SELECT ',' + (gym.nomGYMN + ' ' + gym.prenomGYMN)
        FROM Groupe gr2
        INNER JOIN MembreGroupe mgr ON    mgr.idGROU = gr2.idGROU
        INNER JOIN Gymnaste gym ON    gym.idGYMN = mgr.idGYMN 
        WHERE gr2.idGROU = COALESCE(gr.idGROU, -1)
        ORDER BY (gym.nomGYMN + ', ' + gym.prenomGYMN)
        FOR XML PATH(''), TYPE, ROOT).value('root[1]','NVARCHAR(MAX)'),1,1,'') 
    ), '') AS ListeGymnastes   
    FROM Utilisateur util
    LEFT OUTER JOIN Entraineur ent ON ent.idUTIL = util.idUTIL
    LEFT OUTER JOIN EntraineurGroupe egr ON    egr.idENT = ent.idENT
    LEFT OUTER JOIN Groupe gr ON gr.idGROU = egr.idGROU
    LEFT OUTER JOIN Niveau niv ON niv.idNIV = gr.idNIV
    ORDER BY (util.nomUTIL + ' ' + util.prenomUTIL), (COALESCE(niv.nomNIV, '') + ' ' + COALESCE(gr.nomGROU, ''))
    A mon avis, votre table Niveau doit être vide.

    Si vous donniez un peu plus d'informations sur le contenu de vos tables, ça serait effectivement plus simple.

    Cordialement.

Discussions similaires

  1. [CS4] Problème de sous-requêtes SQL avec Dreamweaver
    Par WPH2009 dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 01/04/2009, 18h50
  2. UPDATE et sous requêtes SQL 4
    Par Cylie34 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2007, 17h07
  3. Sous-requêtes SQL pour ACCESS
    Par bastoon dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/08/2006, 21h41
  4. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57
  5. Sous-requêtes SQL
    Par mandrake256 dans le forum WinDev
    Réponses: 6
    Dernier message: 21/06/2005, 10h15

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