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 :

Intégration condition appartenance dans un SELECT SUM(CASE WHEN etc.


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut Intégration condition appartenance dans un SELECT SUM(CASE WHEN etc.
    Bonjour

    Je souhaite faire une requête selon ce modèle:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT MACOLONNE,SUM(CASE
    WHEN
    (
    (
    (A=15 AND B<=40)
    OR
    (A=22 AND B<60)
    )
    )
    THEN MACONDITION ELSE 0 END) AS EN_TETE_COLONNE
    FROM MATABLE
    GROUP BY MACOLONNE

    Mais en rajoutant après le nième 'OR' une condition nécessitant aggrégation comme:

    Code SQL : 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
    SELECT MACOLONNE,SUM(CASE
    WHEN
    (
    (
    (A=15 AND B<=40)
    OR
    (A=22 AND B<60)
    OR
    (C IN 
    (SELECT C
    FROM MATABLE
    WHERE C IN ('X','Y','Z')
    )
    )
    )
    )
    THEN MACONDITION ELSE 0 END) AS EN_TETE_COLONNE
    FROM MATABLE
    GROUP BY MACOLONNE

    Et là, message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d'exécuter une fonction d'agrégation sur une expression, comportant un agrégat ou une sous requête
    Comment puis-je m'en sortir?

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    C'est bizarre de faire une sous-requête sur la même table et le même champ de condition de recherche.
    Pourquoi tu mets pas directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       (A=15 AND B<=40)
    OR (A=22 AND B<60)
    OR (C IN ('X','Y','Z'))
    Si c'est juste pour l'exemple et que ta requête est en fait plus compliquée, tu peux faire une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT T1.MACOLONNE,
    	SUM(CASE WHEN	(
    						(
    								(T1.A=15 AND T1.B<=40)
    							OR	(T1.A=22 AND T1.B<60)
    							OR	(T2.C IS NOT NULL)
    						)
    					)
    	) THEN T1.MACONDITION ELSE 0 END) AS EN_TETE_COLONNE
    FROM MATABLE T1
    LEFT JOIN MATABLE T2 ON T1.C = T2.C AND T2.C IN ('X','Y','Z')
    GROUP BY T1.MACOLONNE

  3. #3
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Bonjour

    En fait je me suis trompé dans la rédaction de ma question, parce que le réponse là est bien sûr évidente, non ce que je veux c'est un COUNT aprés le dernier "OR" tel que

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT C
    FROM MATABLE
    WHERE C IN ('X','Y','Z')

    mais que la condition soit

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT(C) >= MAVALEUR

    DONC quelquechose comme la requête suivante, mais qui fonctionnerait

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT MACOLONNE,SUM(CASE
    WHEN
    (
    (
    (A=15 AND B<=40)
    OR
    (A=22 AND B<60)
    OR
    (COUNT(C) FROM 
    (SELECT C
    FROM MATABLE
    WHERE C IN ('X','Y','Z')
    )>=MAVALEUR

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Points : 180
    Points
    180
    Par défaut
    Je ne comprends pas tout, mais je vais quand même essayer de donner une piste.

    Peut être en faisant une sous requête qui va renvoyer les valeurs agrégées pour ensuite les comparer à une autre valeur par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT MATABLE.MACOLONNE, SUM(CASE WHEN condition1 OR condition2 OR MATABLE_2.Nb >= MAVALEUR THEN 1 ELSE 0 END) AS EN_TETE_COLONNE
    FROM MATABLE
    INNER JOIN (SELECT MACOLONNE, COUNT(*) Nb FROM MATABLE WHERE C IN ('X', 'Y', 'Z') GROUP BY MACOLONNE) AS MATABLE_2 
         ON MATABLE.MACOLONNE = MATABLE_2.MACOLONNE
    GROUP BY MATABLE.MACOLONNE

  5. #5
    Membre du Club
    Homme Profil pro
    Médecin Département d'Information Médicale (DIM)
    Inscrit en
    Janvier 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Médecin Département d'Information Médicale (DIM)
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2009
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Bonjour

    Je vois l'idée, ça pourrait marcher

    Je teste

    Cordialement

Discussions similaires

  1. [MySQL] PHP/Nombre de SELECT (sum case) selon variables
    Par Invité dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/12/2013, 11h07
  2. Problème avec condition WHERE dans commande SELECT
    Par Badouba76 dans le forum Objective-C
    Réponses: 3
    Dernier message: 08/11/2013, 18h19
  3. SUM(CASE WHEN THEN 1 ELSE 0 END) SUR PLUSIEURS LIGNES
    Par Dr_No dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/11/2012, 14h35
  4. SUM(CASE WHEN. ET AFFICHAGE CONDITIONNEL
    Par Dr_No dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 29/08/2011, 17h26
  5. Condition(s) dans un select
    Par stolx_10 dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 18/12/2008, 16h35

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