Uso de múltiples Y en una declaración de caso en lugar de subconsultas

Tengo un problema al usar varios Y también debesestá en un Funda .

Mi base de datos se parece a:

Enrollment      Paperless      Validated
0               1              0
1               0              1
0               1              0
1               1              1
0               0              0
0               1              0
0               0              0
0               1              0
1               1              1
0               1              0

Así que mi consulta se ve así:

Select
    Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Paperless]
    ,Count(case when [Enrollment] = 1 and [Paperless] = 1 and [Validated] = 1 then 1 else 0 end) as [Online_Only]
    ,Count(*) as "Total"
FROM [my_table]

Violín Sql: http://sqlfiddle.com/#!3/61202/5

Como puede ver en el violín sql, el recuento siempre es 20 en las declaraciones de casos cuando deberían ser diferentes. ¿Estoy haciendo algo mal en la declaración de mi caso o tengo que hacerlo en las subconsultas?

David

preguntado el 21 de mayo de 12 a las 19:05

¿Es esta la consulta exacta? Porque además de las respuestas proporcionadas, noté que las declaraciones de su caso son exactamente las mismas para ambos [Paperless] y [Online_Only]. Además, la respuesta sigue en pie... use SUM -

2 Respuestas

COUNT devuelve verdadero independientemente del valor real. Así que usa:

SUM(CASE ...)

en lugar de

COUNT(CASE ...)

contestado el 21 de mayo de 12 a las 19:05

Aquí hay otras dos alternativas:

(1) Puede usar COUNT(), pero elimine la cláusula ELSE. Esto dará como resultado NULL en lugar de 0, por lo que no se contarán.

(2) También puede cambiar a operaciones matemáticas:

SELECT SUM(Enrollment*Paperless*Validated) as <whatever>,
       SUM(Enrollment*(1-PaperLess)*Validated) as <something else>

Personalmente, a menudo me gusta la forma de multiplicación, porque la declaración es más corta y puedo ver todas las condiciones con mayor frecuencia sin desplazarme.

contestado el 21 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.