Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2010, 11h45   #1
Membre du Club
 
Inscription : mai 2009
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 171
Points : 53
Points : 53
Par défaut Comptage par type sur la même ligne

Bonjour,

J'ai une table qui trace les accidents survenus par type d'accident, par date et par site.

ID DATE SITE TYPE
6 2010-12-13 NK 2
7 2010-12-14 VK 2
8 2010-12-15 QN 2
9 2010-12-15 VK 1
10 2010-12-15 FS 2
11 2010-12-16 WU 2
13 2010-12-14 VK 1

Les types 1 sont les accidents avec arrêt de travail, les type 2 sans arrêt de travail

Je veux faire une requête qui me donne par date et par site sur une même ligne le nombre d'accident avec arrêt et le nombre d'accident sans arrêt :
DATE SITE AAA ASA
2010-12-13 NK 0 1
2010-12-14 VK 1 1
2010-12-15 QN 0 1
2010-12-15 VK 1 0
2010-12-15 FS 0 1
2010-12-16 WU 0 1

Mais je n'y arrive pas : soit je fais la requête suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT COUNT(ID) AS AAA, 0 AS ASA
       ,DATE ,SITE
    FROM FAIT_ACCIDENT
  WHERE TYPE = 1
  GROUP BY SITE, DATE
  UNION
  SELECT 0 AS AAA, COUNT(ID) AS ASA
       ,DATE ,SITE
       FROM FAIT_ACCIDENT
  WHERE TYPE= 2
  GROUP BY SITE, DATE
mais ça me renvoie 2 lignes distinctes pour un même site et même date lorsque j'ai les 2 types d'accident (par exemple site VK le 14/12/2010)

soit la requête suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT DATE, SITE
           ,(SELECT COUNT(ID) 
           FROM FAIT_ACCIDENT AS FF1
  WHERE FF1.TYPE = 1 AND FF1.SITE = SITE AND FF1.DATE = DATE
 ) AS AAA
  ,(SELECT COUNT(ID) 
           FROM FAIT_ACCIDENT AS FF2
  WHERE TYPE = 2 AND FF2.SITE = SITE AND FF2.DATE = DATE
  ) AS ASA
 
  FROM FAIT_ACCIDENT
 
  GROUP BY SITE, DATE
celle ci me génère bien une seule ligne par date et par site mais les nombres d'accidents sont sommés sur chaque ligne (j'ai sur chaque ligne 2 AAA et 5 ASA).

help ! je m'en sors pas. (J'ai pensé peut être à faire 2 vue et fusionner ensuite les 2 vues par une jointure mais ça me parait bien compliqué ) Comment faire svp ? merci de votre aide.
cana13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 12h43   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,


Code :
1
2
3
4
5
 
SELECT date, site, sum(case type when 1 then 1 else 0 end) AS aaa,
sum(case type when 2 then 1 else 0 end) AS asa
FROM FAIT_ACCIDENT
GROUP BY date, site
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h47   #3
Membre du Club
 
Inscription : mai 2009
Messages : 171
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 171
Points : 53
Points : 53
Super simple et efficace !
merci beaucoup
cana13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h40.


 
 
 
 
Partenaires

Hébergement Web