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

Langage SQL Discussion :

SQL GROUP BY


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut SQL GROUP BY
    Bonjour,

    J'ai un schéma de base:
    Table Employees: Liste des employés
    Table Customers: Liste des clients
    Table Orders: Liste des commandes des clients, cette table référence bien entendu le client ayant effectué la commande, et l'employé ayant géré cette vente
    Table Order detail: Contient les détails pour une commande (Liste de produits avec prix et quantité).

    J'essaye maintenant de faire un select pour récupérer toutes les combinaisons client/employé et d'afficher la somme totale des commandes de ce client traité par cet employé. Exemple:
    Imaginons que j'ai 2 employés: David et Albert, ainsi que deux clients: Dupont et capone:

    -Employé- -Client- -Somme-
    David Dupont 0.00€
    David Capone 125.00€
    Albert Dupont 3 500.00€
    Albert Capone 0.00€

    Maintenant j'ai réussis à afficher toutes les combinaisons des clients/Employés, j'arrive juste pas à y incorporer la somme de ventes car ca me rend une erreur liée au groupe by. Voiçi les détails:

    Requête:
    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
    						emp.LastName Employee,
    						cust.ContactName Customer,
    (
    			SELECT COALESCE(SUM(detail.UnitPrice * detail.Quantity),0) Sales
    			FROM [dbo].[Order Details] detail,
    				 [dbo].[Orders] ord
    			WHERE detail.OrderID = ord.OrderID AND
    				  ord.EmployeeID = emp.EmployeeID AND
    				  cust.CustomerID = cust.CustomerID
    )
     
    FROM
    						[dbo].Employees         emp,
    						[dbo].Customers         cust
     
    GROUP BY Lastname, ContactName;
    Output:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Msg 8120, Level 16, State 1, Line 3
    Column 'dbo.Employees.EmployeeID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Msg 8120, Level 16, State 1, Line 3
    Column 'dbo.Customers.CustomerID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Msg 8120, Level 16, State 1, Line 3
    Column 'dbo.Customers.CustomerID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Quelqu'un aurait une idée de ce qui n'est pas cohérant dans ce query?
    D'avance merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    sgbd + définition des tables.

  3. #3
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Punkoff merci pour ta réponse.
    SGBD => SQL Server
    Définition des tables => Elle est claire en regardant la requête

    Enfin je viens de résoudre mon problème (hier je stagnais...)

    Voici ma correction:

    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
    19
    20
     
    SELECT
    						emp.EmployeeID,
    						emp.LastName Employee,
    						cust.CustomerID,
    						cust.ContactName Customer,
    (
    			SELECT COALESCE(SUM(detail.UnitPrice * detail.Quantity),0)
    			FROM [dbo].[Order Details] detail,
    				 [dbo].[Orders] ord
    			WHERE detail.OrderID = ord.OrderID AND
    				  ord.EmployeeID = emp.EmployeeID AND
    				  ord.CustomerID = cust.CustomerID
    ) Sales
     
    FROM
    						[dbo].Employees         emp,
    						[dbo].Customers         cust
     
    GROUP BY Lastname, ContactName, emp.EmployeeID, cust.CustomerID;
    Bon ca inclut des champs tel que les ID mais je les cache dans SSRS donc ca reste ok, si quelqu'un a une version ou il ne retourne que le stricte nécessaire je suis preneur (en dehors d'imbriquer cette requête dans un select filtre

    Merci pour tout

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par Goundy Voir le message
    Punkoff merci pour ta réponse.
    Définition des tables => Elle est claire en regardant la requête
    Bonjour,

    Notez quand même que les gens ici donnent de l'aide gratuitement, qui plus est sur leur temps de travail / études / ce que vous voulez.

    La moindre des chose étant de faciliter au maximum la 1ere analyse afin qu'une réponse rapide puisse être apportée.

    Et décrypter une requête quand on ne connait pas un schéma ne se fait pas en un claquement de doigt, surtout quand celle-ci comporte plusieurs jointures.

    Donc pour "le clair en regardant la requête" on repassera.

    Concernant votre requête je pense qu'elle peut être améliorée (en particulier au niveau de l'écriture de celle-ci pour avoir une meilleure visibilité), mais si vous ne faites pas un minimum de démarche je n'en ferai pas non plus


    Ceci dit je suis content que vous ayez trouvé une solution par vous même !

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

Discussions similaires

  1. SQL GROUP BY intervalle de date
    Par Junior_jef dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 26/04/2007, 15h53
  2. Petit problème SQL (GROUP BY|ORDER BY)
    Par kalash_jako dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2007, 23h17
  3. [SQL] Group by + SUM + Min
    Par Deejoh dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2006, 15h46
  4. [Access] Requète SQL Group By, Order By and Co
    Par zoidy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/06/2006, 14h37
  5. [SQL] Group By
    Par lapartdombre dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/01/2006, 17h06

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