Plusieurs count dans une requete sql

Plusieurs count dans une requete sql - SQL/NoSQL - Programmation

Marsh Posté le 22-09-2010 à 15:58:21    

Bonjour à tous.
Merci d'avance à tous ceux qui pourront m'aider.
 
J'ai donc besoin de faire une requete sur 3 tables différentes et de faire 2 counts dedans.
J'ai besoin de savoir pour chaques usines ,combien d'items sont dans l'état "To-Treat" (statuses.st_id=5) et dans l'état "Information Required"(statuses.st_id=2)
 
Pour l'instant j'ai fais un essais avec cette requette pour une seule usine(19) mais elle ne fonctionne pas
SELECT
SUM(CASE statuses.st_id WHEN 2 THEN 5 END),  
SUM(CASE statuses.st_id WHEN 5 THEN 5 END)  
FROM bugs,statuses
WHERE bugs.bg_status = statuses.st_id
AND bugs.bg_org IN(SELECT orgs.og_id FROM orgs WHERE orgs.og_id=19)  
GROUP BY statuses.st_name
order by statuses.st_name
 
Si vous pourviez m'éclairer ce serait sympa .
Merci d'avance

Reply

Marsh Posté le 22-09-2010 à 15:58:21   

Reply

Marsh Posté le 22-09-2010 à 17:03:57    

Quelle base de données (MySQL, Oracle, Access, ...) ? Je demande cela parce que la syntaxe varie un peu d'une base à l'autre.
 
Déjà, est-ce que vous arrivé à obtenir un compteur ?
 
Je pense que l'on peut simplifier la requête de la façon suivante, pour afficher le premier compteur :

SELECT statuses.st_name, count(*)
FROM bugs,statuses, orgs
WHERE bugs.bg_status = statuses.st_id  
AND orgs.og_id=19
AND bugs.bg_org = orgs.og_id
AND statuses.st_id = 2
GROUP BY statuses.st_name  
order by statuses.st_name


Si ça marche, on verra ensuite pour le deuxième compteur.

Reply

Marsh Posté le 23-09-2010 à 08:55:42    

Bonjour,
La Base utilisée est une SQL server 2008r2
J'étais déjà arrivé à affiché un compteur cohérent mais jamais les 2 en même temps(un des deux était tjs faux)
 
La requêtes modifié me donne bien un compteur pour un des deux statuts.
Reste à avoir le 2eme compteur aussi et réussir à le faire pour toutes les usines

Reply

Marsh Posté le 23-09-2010 à 09:15:59    

Pour avoir les 2 compteurs,la modif simple est :
SELECT statuses.st_name, count(*)  
FROM bugs,statuses, orgs  
WHERE bugs.bg_status = statuses.st_id  
AND orgs.og_id=19  
AND bugs.bg_org = orgs.og_id  
AND (statuses.st_id = 2 OR statuses.st_id = 5)
GROUP BY statuses.st_name  
order by statuses.st_name
 
ça fonctionne dans le cas d'une usine (19) particulière mais j'aimerai modifier la requete pour toutes les usines
Quelqu'un voit une solution ???

Reply

Marsh Posté le 23-09-2010 à 09:26:39    

Bon ben en cherchant 5 minutes j'ai réussi avec la requête suivante:
SELECT orgs.og_name,statuses.st_name, count(*)  
FROM bugs,statuses, orgs  
WHERE bugs.bg_status = statuses.st_id    
AND bugs.bg_org = orgs.og_id  
AND (statuses.st_id = 2 OR statuses.st_id = 5)
GROUP BY statuses.st_name,orgs.og_name
order by orgs.og_name.
 
J'aimerai maintenant modifier le format de sortie.
Pour le moment j'ai 3 colonnes,une pour l'usine,une pour le statut,et une pour le compteur.
J'aimerai avoir toujours 3 colonnes mais pas les mêmes.
La première pour l'usine, la seconde pour le compteur des to-treat et la troisième pour le compteur des informations required.
Quelqu'un sait comment faire ça???

Reply

Marsh Posté le 23-09-2010 à 16:50:53    

Le OR peut se remplacer avantageusement par un IN (2, 5) ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed