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 :

[H2] GROUP BY erreur must be in the group by


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut [H2] GROUP BY erreur must be in the group by
    Bonjour,

    J'utilise une base H2.
    J'ai une requête pour regrouper par achats, seulement j'aimerais également ajouter la date.
    Voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT aa.id_achat, aa.date AS aa_date, COUNT(*) AS nb_articles, od.id AS od_id, od.numero_cheque, od.debit, od.frais_livraison, od.bon_reduction, od.montant_total, od.id_fournisseur, od.id_type_paiement, od.id_membres AS od_id_membres, tp.type, f.nom AS f_nom, m.nom AS m_nom, m.prenom 
    FROM achat_articles aa 
    LEFT JOIN operation_depenses od ON aa.id_achat=od.id_achat_articles 
    LEFT JOIN type_paiement tp ON tp.id=od.id_type_paiement 
    LEFT JOIN fournisseurs f ON f.id=od.id_fournisseur 
    LEFT JOIN membres m ON m.id=od.id_membres 
    WHERE aa.date>='2004-05-07 16:37:06' 
    GROUP BY aa.id_achat 
    ORDER BY aa.date DESC
    Voici l'erreur dans la console:
    Column "AA.DATE" must be in the GROUP BY list; SQL statement:

    J'ai cette erreur car la date doit être différente pour quelques millisecondes.
    Seulement, cela m'oblige a ajouter aa.date dans le group by.
    Si je fais ceci, la requête est fausse et regroupes plus les éléments.

    Il me faudrait une solution pour remplacer la date lorsque aa.id_achat est le même.

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    S'il faut ressortir une seule valeur de aa.date sans l'utiliser comme critère de regroupement, tu peux éventuellement opérer une fonction de regroupement sur cette colonne (MIN, MAX, AVG).

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    Merci pour ta réponse, j'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT aa.id_achat, MIN(aa.date) AS aa_date, COUNT(*) AS nb_articles, od.id AS od_id, od.numero_cheque, od.debit, od.frais_livraison, od.bon_reduction, od.montant_total, od.id_fournisseur, od.id_type_paiement, od.id_membres AS od_id_membres, tp.type, f.nom AS f_nom, m.nom AS m_nom, m.prenom 
    FROM achat_articles aa 
    LEFT JOIN operation_depenses od ON aa.id_achat=od.id_achat_articles 
    LEFT JOIN type_paiement tp ON tp.id=od.id_type_paiement 
    LEFT JOIN fournisseurs f ON f.id=od.id_fournisseur 
    LEFT JOIN membres m ON m.id=od.id_membres 
    WHERE aa.date>='2004-05-07 16:37:06' 
    GROUP BY aa.id_achat 
    ORDER BY aa.date DESC
    J'ai donc ajouté a fonction min() sur la date, mais j'ai toujours l'erreur:
    Column "AA.DATE" must be in the GROUP BY list; SQL statement

    Voir le résultat ci je rajoute aa.date dans le group by : (j'ai 2 fois le même id_achat: 233 car la date est différente pour 1 seconde)
    Nom : aa_date.jpg
Affichages : 588
Taille : 67,7 Ko

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Il faut appliquer la même modification à votre clause ORDER BY...

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci, ça marche!

    J'ai pas pensé à la méthode order by.
    Je suis trop bad

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/05/2013, 21h22
  2. Erreur "Must declare the scalar variable "@id"
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 15/03/2012, 13h26
  3. [2.x] Erreur : Entities passed to the choice field must be managed
    Par ptitdav80 dans le forum Symfony
    Réponses: 3
    Dernier message: 11/12/2011, 23h11
  4. [GROUP BY] column must appear in the GROUP BY clause
    Par michaelbob dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 18/07/2011, 19h40
  5. Réponses: 1
    Dernier message: 11/04/2011, 18h48

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