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 SQL avec CASE qui produit l'erreur : pas valide/pas contenue dans fonction d'agrégation/GROUP BY


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut Requête SQL avec CASE qui produit l'erreur : pas valide/pas contenue dans fonction d'agrégation/GROUP BY
    Bonjour,

    Je butte sur une requête sql celle-ci :
    Code TSQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT [Nom],[Prenom]
    ,CASE WHEN MIN(LicencesQualifications.DateFin) < DATEADD (month , 3, GETDATE()) 
    	THEN 'Moins de 3 mois'
     ELSE	CASE WHEN MIN(LicencesQualifications.DateFin) < DATEADD (month , 6 , GETDATE()) 
    			THEN 'Moins de 6 mois' 
    		END 
     END
    FROM [Personnel] 
    LEFT OUTER JOIN LicencesQualifications on Personnel.NumLicence = LicencesQualifications.NumLicence
    qui me produit l'erreur suivante :
    Msg*8120, Niveau*16, État*1, Ligne*3
    La colonne 'Personnel.Nom' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    Ce que je voudrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nom     | Prénom      | Échéance
    ----------------------------------------
    Nico      |  La           | Moins de 3 mois
    Alex      |  Durant     | Moins de 6 mois
    Machin   |  Truc       | Moins de 6 mois
    Visiblement cette erreur est produit en cas de clause GROUP BY, ce qui n'est pas le cas ici car il n'y en a pas.
    Lorsque j'enlève les CASE (ligne 3 à 8) : la requête fonctionne, mais je ne trouve pas quelle est l'erreur dans mon CASE

    Quelqu'un aurait une idée ?

    Merci à vous ^^

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu utilises une fonction d'aggrégation (MIN) sans agrégation (GROUP BY)

    Tu peux simplifier ton code...
    Ça ne serait pas ça que tu cherches à faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CASE WHEN LicencesQualifications.DateFin < DATEADD (month , 3, GETDATE()) THEN 'Moins de 3 mois'
    	WHEN LicencesQualifications.DateFin < DATEADD (month , 6 , GETDATE()) THEN 'Moins de 6 mois' 
    END

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut
    Effectivement la requête correcte est :

    Code TSQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT [Nom],[Prenom]
    ,CASE WHEN MIN(LicencesQualifications.DateFin) < DATEADD (month , 3, GETDATE()) 
    	THEN 'Moins de 3 mois'
          WHEN MIN(LicencesQualifications.DateFin) < DATEADD (month , 6 , GETDATE()) 
    			THEN 'Moins de 6 mois' 
     
     END
    FROM [Personnel] 
    LEFT OUTER JOIN LicencesQualifications ON Personnel.NumLicence = LicencesQualifications.NumLicence
    GROUP BY [Nom],[Prenom]

    J'avais omis que le CASE ... MIN() est une fonction d’agrégation, merci à toi !

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 10h56
  2. Requête sql avec jointure qui ne fonctionne pas
    Par Damien062 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 10/03/2015, 09h18
  3. [Toutes versions] Requête SQL avec VBA qui ne retourne rien
    Par Roums dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/01/2011, 10h37
  4. Réponses: 13
    Dernier message: 29/01/2008, 15h28
  5. erreur de requête SQL avec ASP mais pas dans Access
    Par csszzen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2007, 09h07

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