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 :

Transact SQL : case when


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Transact SQL : case when
    Bonjour,

    Je suis débutante en Transact SQL.
    Je voudrais, pour obtenir la colonne [06/01], diviser la somme des quantités (acl_amount) par le nombre de membres (mem_id) selon les conditions du when case. Le problème étant que, vu la requête, un même mem_id peut-être comptabilisé plusieurs fois, d'où la nécessité d'un distinct.
    Sans faire la division, ça marche.

    Voici ma requête (avec division et erreur):

    select
    [Commercial] = (mem.mem_ref03 + ' ' + mem.mem_ref04 + ' - points crédités'),
    [06/01] = sum(case when (year(acl.acl_value_date)=2006 and month(acl.acl_value_date)=1) then acl_amount else 0 end)
    / (case when (year(acl.acl_value_date)=2006 and month(acl.acl_value_date)=1) then count(distinct mem1.mem_id) else 1 end)
    from
    tm_acl_account_line acl
    inner join tm_acc_account acc on acc.acc_id = acl.acc_id
    inner join tm_mem_member mem1 on mem1.mem_id = acc.mem_id
    inner join tm_mgr_member_group mgr on mgr.mem_id = mem1.mem_id
    inner join tm_mem_member mem on mgr.mem_id_parent = mem.mem_id
    where
    acl.alc_id = 1 and --crédit
    mem1.mty_id = 1 and --restaurateur
    mem.mty_id = 3 and --commercial
    mem.prj_id= '1'
    --mem.prj_id = @param1
    group by (mem.mem_ref03 + ' ' + mem.mem_ref04 + ' - points crédités')

    Le message d'erreur est :
    Column 'acl.acl_value_date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

    Mais je ne veux pas faire de group by sur ce champ, ce serait faux.

    Qqn aurait une idée pour la syntaxe ou la méthode à utiliser svp?
    Merci!!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    1) nous ne sommes pas devins, merci de nous décrire les tables en jeu et de poster le DDL de vos tables afin que tout un chacun puise vous aider
    2) merci d'indenter votre code afin de le rendre lisible. Vous en bénéficierez aussi et vous vous rendrez sans doute compte de ce qui ne va pas dans votre requête.

    Lisez ceci : http://www.developpez.net/forums/showthread.php?t=944

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

Discussions similaires

  1. Création booleén : SQL Case when
    Par avyperez dans le forum SAS Base
    Réponses: 14
    Dernier message: 22/11/2013, 16h25
  2. SQL Case When
    Par mechatikhaled dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/01/2009, 16h57
  3. Sql CASE/WHEN avec HyperFile
    Par iniaina dans le forum HyperFileSQL
    Réponses: 5
    Dernier message: 21/11/2008, 10h37
  4. [PL/SQL] CASE xxx WHEN NULL
    Par Loko dans le forum Oracle
    Réponses: 5
    Dernier message: 06/12/2004, 10h40
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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