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 :

Group BY sur un alias ?


Sujet :

MS SQL Server

  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut Group BY sur un alias ?
    Bonjour,

    Il semblerait qu'il soit impossible sous SQL SERVER de réaliser un GROUP BY en utilisant l'alias du nom de la colonne.

    Comment faire dans un cas comme celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
    	Case when (Dossier.ExclusionDeGarantie <> 1)
    		then Dossier.GarantieValide
    		else 'HG'
    	end
    	as Garantie,
    	COUNT(DISTINCT(PiecesDetacheesParDossier.NumDossier)) as NbDossier
    FROM PiecesDetacheesParDossier 
    LEFT JOIN Dossier ON Dossier.NumDossier=PiecesDetacheesParDossier.NumDossier
     
    GROUP BY
    	Garantie
    Merci

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    il semblerait que cela fonctionne avec :

    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
    SELECT
    	Case when (Dossier.ExclusionDeGarantie <> 1)
    		then Dossier.GarantieValide
    		else 'HG'
    	end
    	AS Garantie,
    	COUNT(DISTINCT(PiecesDetacheesParDossier.NumDossier)) AS NbDossier
    FROM PiecesDetacheesParDossier 
    LEFT JOIN Dossier ON Dossier.NumDossier=PiecesDetacheesParDossier.NumDossier
     
    GROUP BY
    	Garantie,
    	Case when (Dossier.ExclusionDeGarantie <> 1)
    		then Dossier.GarantieValide
    		else 'HG'
    	end

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Il semblerait qu'il soit impossible sous SQL SERVER de réaliser un GROUP BY en utilisant l'alias du nom de la colonne.
    Ce n'est pas spécifique à SQL Server. C'est la norme qui l'interdit. Mais certains SGBDR ne la respecte pas (exemple MySQL...)
    La raison en est simple : les alias de colonne ne sont utilisés que pour l'affichage. Il sont donc dissociés de la problématique de lecture des données.

    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/ * * * * *

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Désolé de remonter ce topic comme ça mais PostgreSQL est très respectueuse de la norme SQL et pourtant c'est autorisé (j'ai testé avec PostgreSQL 9.0).
    Personnellement je ne trouve pas l'utilisation d'un alias illogique dans un GROUP BY et ORDER BY.
    En ce moment avec SQL Server (2005 et 2008) je dois faire un copier/coller d'une expression qui fait 4 lignes dans mon SELECT, dans le GROUP BY et ORDER BY.
    Je pourrais pu économiser 6 lignes si l'alias était autorisé.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  5. #5
    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,

    La réponse de SQLPro vous a induit en erreur. Si l'on ne peut utiliser les alias du SELECT dans le GROUP BY, c'est simplement parce que la phase GROUP BY est exécutée avant la phase SELECT. Donc au moment où le GROUP BY est évalué, vos alias n'existent pas encore. En revanche, la phase ORDER BY est exécutée après la phase SELECT, vous pouvez donc bien utiliser vos alias dans le ORDER BY.

    Enfin, pour le GROUP BY, vous pouvez éventuellement utiliser une sous requête, ou mieux (plus lisible) une CTE : vous pouvez alors dans votre requête principale utiliser les alias de la sous requête (ou de la CTE). Il faut cependant vérifier que cela n'a pas de conséquences sur les performances...

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

Discussions similaires

  1. Group by sur un alias
    Par clusty dans le forum SQL
    Réponses: 4
    Dernier message: 06/04/2011, 19h52
  2. Problème de GROUP BY sur un alias
    Par vever001 dans le forum Développement
    Réponses: 4
    Dernier message: 06/05/2010, 20h36
  3. Réponses: 9
    Dernier message: 17/01/2004, 10h51
  4. Group by sur resultat
    Par pointe dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/12/2003, 08h30
  5. operation sur des alias
    Par 74160 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/11/2003, 18h19

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