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 :

Problème de GROUP BY sur un alias


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut Problème de GROUP BY sur un alias
    Bonjour à tous,

    Je suis sous SQL Server 2005 et il n'accepte visiblement pas le GROUP BY sur un alias.
    J'ai cherché (comme d'habitude) sur google mais je n'ai pas trouvé de réponse claire donc je m'en remet à vous.

    Voici ma requete qui ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(P.PRIX*D.QCOM) AS MONTANT, D.NCOM FROM DETAIL D, PRODUIT P 
    WHERE D.NPRO=P.NPRO 
    GROUP BY MONTANT;
    et le message d'erreur:
    Msg*207, Niveau*16, État*1, Ligne*3
    Nom de colonne non valide*: 'MONTANT'.
    Un tout grand merci pour votre aide

  2. #2
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonsoir,

    Ce n'est pas possible.
    Group by sur un alias ?

    Il faut ré-écrire la fonction d'agrégat dans le GROUP BY:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GROUP BY SUM(P.PRIX*D.QCOM)
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    J'avais déjà essayé en faisant comme cela mais il m'affiche une erreur:

    Msg*144, Niveau*15, État*1, Ligne*1
    Impossible de faire appel à un agrégat ou à une sous-requête dans une expression utilisée dans la liste GROUP BY d'une clause GROUP BY.
    Voici la requete en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(P.PRIX*D.QCOM) AS MONTANT, D.NCOM FROM DETAIL D, PRODUIT P 
    WHERE D.NPRO=P.NPRO 
    GROUP BY sum(P.PRIX*D.QCOM);
    Merci

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Un GROUP BY sur un agrégat est totalement illogique. Le GROUP BY se fait sur les colonnes non agrégées relativement à celles agrégées. Lisez le cours que j'ai écrit : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1
    Au passage les jointure dans le FROM c'est plus que ringard... La norme SQL de 1992, soit 18 ans à fixé le JOIN ! A lire : http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT sum(P.PRIX*D.QCOM) AS MONTANT, D.NCOM 
    FROM  DETAIL D
          INNER JOIN PRODUIT P 
                ON D.NPRO=P.NPRO 
    GROUP BY D.NCOM;
    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/ * * * * *

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    Ok merci beaucoup pour ton aide ,

    donc il est impossible de grouper avec un alias de colonne grâce la clause GROUP BY...c'est noté

    Je m'en vais lire ton tuto qui a l'air très bien fait merci.

    J'ai un autre petit soucis:
    Dans ma table DETAIL, ma clé primaire est (NCOM, NPRO) et j'ai NCOM qui se répète parfois. Donc mon problème c'est que je voudrais garder la requête ci dessus mais en affichant le montant pour chaque ligne de ma table.

    J'ai essayé en faisant GROUP BY NCOM, NPRO mais cela ne fonctionne pas...

    Comment dois-je procéder ?

Discussions similaires

  1. Group BY sur un alias ?
    Par Seb33300 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/05/2013, 11h31
  2. Group by sur un alias
    Par clusty dans le forum SQL
    Réponses: 4
    Dernier message: 06/04/2011, 19h52
  3. [XI] problème avec groupe sur un champ trié par origine ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 11/04/2007, 15h31
  4. [SQL] Problème group by sur view
    Par helene34 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/01/2007, 08h25
  5. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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