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 :

Syntaxe CASE pour SUM


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut Syntaxe CASE pour SUM
    Bonjour,

    Je cherche à sommer la colonne C.ACTDUREVENTIL avec une condition :
    si C.ACTUNITE = 'J' alors C.ACTUNITE vaut '700'

    La requête ci-dessous ne génère pas d'erreur mais seulement 2 lignes (normal).
    Je débute en Transact, pourriez-vous me donner la bonne syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    CASE C.ACTUNITE WHEN 'J' THEN '700' END
    ,SUM(C.actdureventil) AS 'total' 
    FROM PERSVAR A JOIN PERS B ON A.matric = B.matric 
    INNER JOIN ACTIVENTIL C ON A.matric = C.matric 
    WHERE 
    A.dsitud = (SELECT MAX(dsitud) FROM PERSVAR B WHERE B.matric = A.matric) 
    AND C.actdatventil BETWEEN '2010-01-01' AND '2010-12-31' 
    AND A.matric = '214554'
    GROUP BY C.ACTUNITE

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Est ce que le total de la somme doit être égale à 700 ou bien pour chaque cas rencontré C.ACTUNITE = 'J' --> C.ACTDUREVENTIL = 700 ?

    ++

  3. #3
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut
    C'est comme ceci effectivement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaque cas rencontré C.ACTUNITE = 'J' --> C.ACTDUREVENTIL = 700

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
     SUM(CASE C.ACTUNITE WHEN 'J' THEN 700
                         ELSE C.actdureventil
         END) AS 'total'              
    FROM PERSVAR A 
    JOIN PERS B 
     ON A.matric = B.matric 
    INNER JOIN ACTIVENTIL C 
     ON A.matric = C.matric 
    WHERE A.dsitud = (SELECT MAX(dsitud) 
                      FROM PERSVAR B WHERE B.matric = A.matric) 
     AND C.actdatventil BETWEEN '2010-01-01' AND '2010-12-31' 
      AND A.matric = '214554'
    GROUP BY C.ACTUNITE
    ++

  5. #5
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut
    Excusez moi, je me suis mal exprimé, je voudrais ajouter C.ACTUNITE à C.actdureventil quand C.ACTUNITE = 'J' THEN 700

    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
    SELECT 
     SUM(CASE C.ACTUNITE WHEN 'J' THEN 700
                         + C.actdureventil
         END) AS 'total' 
     END               
    FROM PERSVAR A 
    JOIN PERS B 
     ON A.matric = B.matric 
    INNER JOIN ACTIVENTIL C 
     ON A.matric = C.matric 
    WHERE A.dsitud = (SELECT MAX(dsitud) 
                      FROM PERSVAR B WHERE B.matric = A.matric) 
     AND C.actdatventil BETWEEN '2010-01-01' AND '2010-12-31' 
      AND A.matric = '214554'
    GROUP BY C.ACTUNITE

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Ok :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
     SUM(CASE C.ACTUNITE WHEN 'J' THEN 700 + C.actdureventil
                         ELSE C.actdureventil
         END) AS 'total'              
    FROM PERSVAR A 
    JOIN PERS B 
     ON A.matric = B.matric 
    INNER JOIN ACTIVENTIL C 
     ON A.matric = C.matric 
    WHERE A.dsitud = (SELECT MAX(dsitud) 
                      FROM PERSVAR B WHERE B.matric = A.matric) 
     AND C.actdatventil BETWEEN '2010-01-01' AND '2010-12-31' 
      AND A.matric = '214554'
    GROUP BY C.ACTUNITE
    ++

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

Discussions similaires

  1. Aide pour SUM et CASE
    Par lagsurfer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2013, 17h05
  2. Réponses: 3
    Dernier message: 31/03/2006, 08h47
  3. quelle syntaxe svp pour ce code ?
    Par man123 dans le forum Langage
    Réponses: 10
    Dernier message: 16/11/2005, 00h05
  4. switch case pour deux variable en meme temps
    Par petitours dans le forum C
    Réponses: 3
    Dernier message: 06/11/2005, 19h20
  5. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39

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