2009-06-19 3 views
6

J'essaie de sélectionner plusieurs résumés conditionnels dans un résultat de table unique sur une base de données DB2.SQL (DB2) Renvoie plusieurs comptes conditionnels dans une seule requête

Exemple:

SELECT COUNT(FOO) FROM T1 WHERE T1.A=1 AS A_COUNT, 
SELECT COUNT(FOO) FROM T1 WHERE T1.B=2 AS B_COUNT 
Ext... 

Toute aide est appréciée.

+0

consultez ma réponse. Je laisse un commentaire car ils semblent envoyer des alertes aux utilisateurs de stackoverflow plus rapidement. – Eric

Répondre

6

Cela compte l'apparition de chaque condition:

select sum(case when t1.a = 1 then 1 else 0 end) as A_COUNT 
    , sum(case when t1.b = 2 then 1 else 0 end) as B_COUNT 
    from t1 
where t1.a = 1 
    or t1.b = 2 
6
select count(case when t1.a = 1 then foo else null end) as A_COUNT 
    , count(case when t1.b = 2 then foo else null end) as B_COUNT 
    from t1 
where t1.a = 1 
    or t1.b = 2 

La clause est facultative mais peut améliorer les performances. De plus, "else null" est implicite lorsque la clause else est omise, donc vous pouvez également laisser cette option de côté.

1
select count(foo) 
    from t1 
where a = 1 
union 
select count(foo) 
    from t1 
where b = 2 
.... 
0

Cela fera.

SELECT A_COUNT as Type ,COUNT(FOO) FROM T1 WHERE T1.A=1, 

Union 


SELECT B_COUNT as Type, COUNT(FOO) FROM T1 WHERE T1.B=2