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 :

count avec plusieurs conditions


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut count avec plusieurs conditions
    Bonjour à vous ,

    Petit souci concernant une requête avec un count :s

    Voilà la requête en question :

    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
    16
    17
    18
    19
    20
    21
    SELECT DATE, LOG, [NUMERO MATRICULE],
                                (SELECT  COUNT(MAIL)
                                   FROM   LEMAIL
                                   WHERE Catégorie = 'essai' AND (LESITE = ?) AND (DATE = ?)) AS plouet,
                                 (SELECT COUNT(MAIL)
                                   FROM   LEMAIL
                                   WHERE (CODE_EVT = 14 OR
                                                             CODE_EVT = 13 OR
                                                             CODE_EVT = 424 OR
                                                             CODE_EVT = 419) AND (LESITE = ?) AND (DATE = ?)) AS ploup,
                                 (SELECT COUNT(MAIL)
                                   FROM   LEMAIL
                                   WHERE MAIL LIKE '*truc*' AND (LESITE = ?) AND (DATE = ?)) AS machin,
                                 (SELECT COUNT(MAIL)
                                   FROM   LEMAIL
                                   WHERE (CODE_EVT = 61 OR
                                                             CODE_EVT = 64) AND (LESITE = ?) AND (DATE = ?)) AS bidule
    FROM            LEMAIL
    WHERE        (LESITE = ?) AND (DATE = ?)
    GROUP BY DATE, [NUMERO MATRICULE], LOG
    ORDER BY LOG
    Mon souci est le suivant , pour le moment cette requête compte l'ensemble des mails et affecte ces résultats à toutes les lignes , or , j'aimerais qu'il compte pour chaque matricule le nombre de mails liés à lui , je ne m'en sors pas après plusieurs essais , si quelqu'un a une idée , je suis + que preneur^^

  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 922
    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 922
    Points : 51 719
    Points
    51 719
    Billets dans le blog
    6
    Par défaut
    Ceci serait déjà plus "intelligent" plutôt que 4 sous requêtes...
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT DATE, LOG, [NUMERO MATRICULE],
           SUM(CASE WHEN     Catégorie = 'essai' 
                         AND LESITE = ?
                         AND DATE = ? 
                       THEN 1 
                    ELSE 0 
               END) AS plouet,
           SUM(CASE WHEN   (CODE_EVT = 14 
                         OR CODE_EVT = 13 
                         OR CODE_EVT = 424 
                         OR CODE_EVT = 419) 
                         AND LESITE = ? 
                         AND DATE = ?
                        THEN 1
                     ELSE 0
                END) AS ploup,
            SUM(CASE WHEN     MAIL LIKE '*truc*' 
                          AND LESITE = ?
                          AND DATE = ?
                       THEN 1
                    ELSE 0
                END) AS machin,
            SUM(CASE WHEN (  CODE_EVT = 61 
                          OR CODE_EVT = 64) 
                          AND LESITE = ?
                          AND DATE = ?
                       THEN 1
                    ELSE 0
                END) AS bidule
    FROM   LEMAIL
    WHERE  LESITE = ?
      AND  DATE = ?
    GROUP BY DATE, LOG,  
    ORDER BY LOG
    Pour votre problème je crois qu'il suffit de rajouter un groupage. Mais comme vous n'avez pas respecté la charte de postage, impossible de vous aider davantage !

    A +

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Désolé pour le copier coller du code , la précipitation^^

    Oui , en effet , cela semble plus intelligent que 4 sous-requêtes , ceci dit , je reste bloqué sur mon souci , si vous pouviez m'aider à sortir de ce mauvais pas , cela m'arrangerait !

    ps: encore navré pour la charte :s

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 922
    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 922
    Points : 51 719
    Points
    51 719
    Billets dans le blog
    6
    Par défaut
    Postez le DDL de vos tables ainsi qu'un jeu d'essais !

    A +

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bon post récapitulatif alors :

    Ma 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
    15
    16
    17
    18
    19
    20
    21
    SELECT        DATE, LOGCDC, [NUMERO MATRICULE],
                                (SELECT  COUNT(MAIL)
                                   FROM            LEMAIL
                                   WHERE        Catégorie = 'Administratif' AND (LESITE = ?) AND (DATE = ?)) AS GRENELLE,
                                 (SELECT        COUNT(MAIL)
                                   FROM            LEMAIL
                                   WHERE        (CODE_EVT = 14 OR
                                                             CODE_EVT = 13 OR
                                                             CODE_EVT = 424 OR
                                                             CODE_EVT = 419) AND (LESITE = ?) AND (DATE = ?)) AS ADPTO,
                                 (SELECT        COUNT(MAIL)
                                   FROM            LEMAIL
                                   WHERE        MAIL LIKE '*box*' AND (LESITE = ?) AND (DATE = ?)) AS BBOX,
                                 (SELECT        COUNT(MAIL)
                                   FROM            LEMAIL
                                   WHERE        (CODE_EVT = 61 OR
                                                             CODE_EVT = 64) AND (LESITE = ?) AND (DATE = ?)) AS IDEO
    FROM            LEMAIL
    WHERE        (LESITE = ?) AND (DATE = ?)
    GROUP BY DATE, LOGCDC, [NUMERO MATRICULE]
    ORDER BY LOGCDC
    DDL de ma table de destination

    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 TABLE [dbo].[TABLEVA](
    	[DATE] [datetime] NULL,
    	[MATRICULE] [float] NOT NULL,
    	[LOG ACD] [float] NULL,
    	[GRENELLE] [int] NULL,
    	[ADPTO] [int] NULL,
    	[BBOX] [int] NULL,
    	[IDEO] [int] NULL,
    	[ADPHYP] [int] NULL,
    	[TLV] [int] NULL,
    	[TOR] [int] NULL,
    	[FID] [int] NULL,
    	[DATEFORM] [nvarchar](50) NULL
    ) ON [PRIMARY]
    Voilà ce que j'obtiens en exécutant ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2009-09-22 00:00:00.000	30115	NULL	225	78	0	242	NULL	NULL	NULL	NULL	22/09/2009
     
    2009-09-22 00:00:00.000	29833	NULL	225	78	0	242	NULL	NULL	NULL	NULL	22/09/2009
     
    2009-09-22 00:00:00.000	30679	NULL	225	78	0	242	NULL	NULL	NULL	NULL	22/09/2009
     
    2009-09-22 00:00:00.000	28804	NULL	225	78	0	242	NULL	NULL	NULL	NULL	22/09/2009
    Les nulls sont normaux , je ne traite qu'une partie pour le moment.

    Le count ne compte pas les mails pour chaque personne , cela compte pour l'ensemble et attribue le résultat à toutes les lignes , tout ce que j'aimerais arriver à faire , c'est avoir les nombres de mails correspondant aux critères pour chaque personne.

    En fait , dans un monde idéal je ferais un GROUP BY [NUMERO MATRICULE] dans chaque Count ou quelque chose de ce genre qu'il puisse faire le lien avec chaque résultat , mais je ne sais comment arriver à cela :s

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

Discussions similaires

  1. Somme si avec plusieurs conditions et plage de données variables.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2007, 15h19
  2. Réponses: 1
    Dernier message: 27/06/2007, 17h01
  3. Having avec plusieurs conditions ?
    Par jchatard dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/04/2007, 16h58
  4. Si je fais un if() avec plusieurs conditions ..
    Par Pauli dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2007, 17h47
  5. like avec plusieur condition
    Par wayak3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2007, 12h43

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