2009-11-25 10 views
7

No estoy seguro exactamente cómo explicar esto, pero por imágenes que haya una mesa con una gran cantidad de campos booleanos como este ......Cuenta para muchos campos booleanos en una consulta sql?

Tabla: Coches

Columnas:

automática: booleano

plata: booleano

americano: booleano

ruidoso: booleano

maloliente: booleano

rápida: booleano

(campos tontas y la mayoría de ellos no habría Bools en realidad, sino sólo un ejemplo)

Lo que lo que hay que hacer es generar una lista de estos campos con una cantidad de resultados de búsqueda al lado de cada uno, de modo que si hubiera 100 autos plateados en la base de datos y 57 autos estadounidenses, la lista podría parecerse a esto ...

automática: (150)

de plata (100)

Americana (57)

ruidoso (120)

maloliente (124)

rápido (45)

Por lo tanto, es básicamente como una lista de fi Si el usuario hace clic en "plateado", reducirá la búsqueda para mostrar solo autos plateados y ellos saben que obtendrán 100 resultados. Los números al lado de todos los otros filtros disminuirán porque filtramos todos los autos que no son de plata.

Contando las ocurrencias de un campo sería fácil ....

SELECT COUNT (*) de los automóviles DONDE automática = true;

... me daría la primera fila, por ejemplo. Pero no quiero tener que hacer una declaración de SQL para cada filtro, ya que podría haber más de 30 de ellos. He visto muchos sitios hacer esto, así que debe ser más fácil de lo que creo.

Cualquier ayuda muy sería apreciado :)

Jon

Respuesta

6

Suponiendo que el bit es 1/0 entonces se puede resumir en lugar de COUNT:

SELECT SUM(Automatic) as Automatic, SUM(Smelly) as Smelly, SUM(American) as Japanese FROM ... 
+0

suena perfecto. Gracias. – jonhobbs

3

Si no está ya 1/0 , entonces, en función de lo que sea el valor verdadero, puede hacer esto:

Select 
    Sum(Case When Automatic = truevalue Then 1 Else 0 End) as Automatic, 
    Sum(Case When Smelly = truevalue Then 1 Else 0 End) as Smelly, 
    Sum(Case When American = truevalue Then 1 Else 0 End) as American, 
    Sum(Case When Noisy = truevalue Then 1 Else 0 End) as Noisy 
    From Table 
12

Con sql server 2008 whe n tratando de resumir un campo de tipo de datos bit ocures los siguientes errores:

Msg 8117, nivel 16, estado 1, línea 10

Operando tipo de datos bit es válido para el operador de suma .

para que pueda probar esto:

SELECT SUM(CAST(Automatic AS TINYINT)) as Automatic, SUM(CAST(Smelly AS TINYINT)) as Smelly, SUM(CAST(American AS TINYINT)) as Japanese FROM YourTable 
Cuestiones relacionadas