Uso de múltiples Y en una declaración de caso en lugar de subconsultas
Frecuentes
Visto 557 veces
2
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
2 Respuestas
6
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
2
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 sql sql-server tsql or haz tu propia pregunta.
¿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... useSUM
- swasheck