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 :

Confection d'une requete sql


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Confection d'une requete sql
    Voila j'ai une base de donée qui contient deux tables :
    Adherent et abonne

    table adherent contient les colonnes suivantes : CodeAdh,Nom,Prenom,...
    table abonne contient les colonnes suivantes : CodeAdh,DateDebut,DateFin,...

    bien sur chaque adherent a plusieurs abonnement

    je veux une requete qui m'affiche : codeadh,Nom,Prenom et le dernier abonnement de chaque adherent


    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 792
    Points
    4 792
    Par défaut
    0) ouvrir une requête de sélection
    1) mettre les tables en relations avec INNER JOIN
    2) ajouter un MAX(DateFin) As DernierAbonnement dans la liste du SELECT
    3) faire un GROUP BY sur CodeAdh,Nom,Prenom

    ... éventuellement bosser un peu le SQL avant de se précipiter dans les forums ...

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    MERCI Népomucène

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je conçois que pour le débutant l'utilisation du concepteur de requête soit un plus, mais ce n'est pas l'outil le plus précis que l'on peut trouver en ce qui concerne la création d'une requête, surtout dès qu'elle deviennent un peu plus complexe que la demande de ce sujet.

    Je ne peux donc que vous conseiller d'ouvrir l'explorateur d'objets de SQL Server Management Studio (SSMS) que vous obtiendrez en pressant F8.
    Là la liste des bases de données auxquelles vous avez accès sont affichées, et vous pouvez naviguer à travers les objets de la base de données, notamment les tables, ce qui vous permet d'en connaître la structure.

    Ensuite à vous de trouver la méthode qui vous convient le mieux pour écrire vos requêtes.
    Je vais vous donner celle que j'utilise après quelques années d'expérience en développement et administration de bases de données.
    D'autres l'utilisent également, mais ce n'est pas pour autant que c'est la meilleure et que vous devez absolument la suivre.

    D'abord écrire SELECT *, puis FROM, et complétez avec les jointures vers tous les tables dont vous avez besoin pour obtenir le résultat que vous recherchez.
    L'alias de table, introduit par le mot clé AS, vous permet de vous faciliter un peu la vie, et d'alléger le texte de votre requête, mais là encore, rien ne vous oblige à les utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT		*
    FROM		dbo.adherent AS ADH
    INNER JOIN	dbo.abonne AS ABO
    			ON ADH.CodeAdh = ABO.CodeAdh
    Ensuite ajoutez les colonnes dont vous avez besoin dans votre SELECT.
    Là aussi vous pouvez aliaser vos colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT		ADH.Nom AS Nom_Adherent
    		, ADH.Prenom AS Prenom_Adherent
    		, MAX(DateDebut) AS Date_Dernier_Abonnement
    FROM		dbo.adherent AS ADH
    INNER JOIN	dbo.abonne AS ABO
    			ON ADH.CodeAdh = ABO.CodeAdh
    Décorez ensuite la requête avec ce qui est requis, ici la clause GROUP BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT		ADH.Nom AS Nom_Adherent
    		, ADH.Prenom AS Prenom_Adherent
    		, MAX(DateDebut) AS Date_Dernier_Abonnement
    FROM		dbo.adherent AS ADH
    INNER JOIN	dbo.abonne AS ABO
    			ON ADH.CodeAdh = ABO.CodeAdh
    GROUP BY	ADH.Nom
    		, ADH.Prenom
    On peut éventuellement ajouter un ORDER BY :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT		ADH.Nom AS Nom_Adherent
    		, ADH.Prenom AS Prenom_Adherent
    		, MAX(DateDebut) AS Date_Dernier_Abonnement
    FROM		dbo.adherent AS ADH
    INNER JOIN	dbo.abonne AS ABO
    			ON ADH.CodeAdh = ABO.CodeAdh
    GROUP BY	ADH.Nom, ADH.Prenom
    ORDER BY	ADH.Nom, ADH.Prenom
    Et éventuellement filtrer l'agrégat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT		ADH.Nom AS Nom_Adherent
    		, ADH.Prenom AS Prenom_Adherent
    		, MAX(DateDebut) AS Date_Dernier_Abonnement
    FROM		dbo.adherent AS ADH
    INNER JOIN	dbo.abonne AS ABO
    			ON ADH.CodeAdh = ABO.CodeAdh
    GROUP BY	ADH.Nom, ADH.Prenom HAVING MAX(DateDebut) > '20101226'
    ORDER BY	ADH.Nom, ADH.Prenom
    Y'a plus qu'à tester et éventuellement optimiser

    @++

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

Discussions similaires

  1. pb d'execution d'une requete sql
    Par pit9.76 dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/06/2004, 12h03
  2. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  3. date d'une requete sql
    Par innosang dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/04/2004, 09h27
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Une requete SQL unpeux difficile !!
    Par nil dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/03/2004, 12h32

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