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 :

Problème avec case et group by


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut Problème avec case et group by
    Bonjour à tous,

    J'essaye d'exécuter cette requête afin d'avoir certaines infos groupées par code_article, mais j'ai une message qui s'affiche :
    Not a group by expression
    Pourtant en aucun cas je veux grouper ce que contient mon case...
    Comment régler le problème??

    Voici la 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
    create materialized view a_data_hors_promo_6m as
      SELECT t.code_article, 
             case
               when t.qte_caisse = 0
                 OR t.qte_caisse_promo = 0
               then sum(t.qte_caisse)
               else sum(t.ca_cial_ttc_real) - sum(t.ca_cial_promo_ttc_real) / sum(t.qte_caisse) - sum(t.qte_caisse_promo)
             end AS PMC,
             sum(t.ca_cial_ttc_real) - sum(t.ca_cial_promo_ttc_real) AS ca_tot,
             sum(t.qte_caisse) - sum(t.qte_caisse_promo) AS QTE_TOT,
             sum(t.mg_brut_ciale_real) - sum(t.mg_brut_ciale_promo_real) AS mg_tot  
        FROM t_article_mois t
       WHERE t.annee_mois_jour > '31/12/2009'
    GROUP BY t.code_article;
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Ça dépend de ce que vous contrôlez dans votre case.
    Tel que c'est écrit, vous contrôlez après l'agrégat d'où le message d'erreur.

    Qu'est-ce que vous désirez faire exactement ?
    Exclure chaque qte_caisse à 0 où lorsque le total par article fait 0 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    En fait je veux :

    Si qte_caisse = 0 ---> Mettre 0 à la colonne

    Sinon ----> faire le calcul :

    sum(t.ca_cial_ttc_real)-sum(t.ca_cial_promo_ttc_real)/sum(t.qte_caisse)-sum(t.qte_caisse_promo)

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Alors il faut mettre sum(qte_caisse) dans le case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      SELECT t.code_article, 
             case
               when sum(t.qte_caisse) = 0
               then 0
               else sum(t.ca_cial_ttc_real) - sum(t.ca_cial_promo_ttc_real) / sum(t.qte_caisse) - sum(t.qte_caisse_promo)
             end AS PMC,
             sum(t.ca_cial_ttc_real) - sum(t.ca_cial_promo_ttc_real) AS ca_tot,
             sum(t.qte_caisse) - sum(t.qte_caisse_promo) AS QTE_TOT,
             sum(t.mg_brut_ciale_real) - sum(t.mg_brut_ciale_promo_real) AS mg_tot  
        FROM t_article_mois t
       WHERE t.annee_mois_jour > '31/12/2009'
    GROUP BY t.code_article;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Je te remercie !
    Ca m'a aidé

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

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. [Cognos 6][Impromptu] Problème avec les champs groupés
    Par nicoduhavre dans le forum Cognos
    Réponses: 4
    Dernier message: 23/03/2007, 15h27
  3. problème avec CASE
    Par PAYASS59 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/11/2006, 13h08
  4. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  5. [XML][XSLT] Débutant {Probléme avec For-each-group}
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/01/2006, 21h38

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