2009-06-19 28 views
6

Estoy intentando seleccionar varios resúmenes condicionales en un resultado de tabla única en una base de datos basada en DB2.SQL (DB2) Devuelve múltiples recuentos condicionales en una sola consulta

Ejemplo:

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... 

Cualquier ayuda es apreciada.

+0

echa un vistazo a mi respuesta. Dejaré un comentario porque parecen enviar alertas a los usuarios de stackoverflow más rápido. – Eric

Respuesta

6

Esto cuenta la ocurrencia de cada estado:

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 

Donde la cláusula es opcional estrictamente hablando, pero puede ayudar al rendimiento. Además, "else null" está implícito cuando se omite la cláusula else, por lo que también puede dejarla de manera segura.

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

Esto lo hará.

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 
Cuestiones relacionadas