2011-01-12 13 views
5

OK, aquí es lo que mi tabla parecede consultas SQL para obtener filas y filas totales totales juego condición específica

------------------------------------------------ 
id      type 
----------------------------------------------- 
1      a 
2      b 
3      a 
4      c 
5      c 
7      a 
8      a 
------------------------------------------------ 

Ahora, necesito una consulta que me puede dar esta salida ...

----------------------------------------------------------------- 
count(*) | count(type=a) | count(type=b) | count(type=c) 
----------------------------------------------------------------- 
8     4     1    3 
------------------------------------------------------------------ 

Sólo sé para obtener el conjunto total utilizando la cuenta (*), pero la forma de hacer el restante

Respuesta

5
SELECT 
COUNT(*), 
COUNT(CASE WHEN type='a' THEN 1 END) as count_a, 
COUNT(CASE WHEN type='b' THEN 1 END) as count_b, 
COUNT(CASE WHEN type='c' THEN 1 END) as count_c, 
FROM table1; 

//or you can do 
SELECT type, COUNT(*) 
FROM table1 
GROUP BY type WITH ROLLUP 

En este último caso obtendrá resultados:

a | 4
b | 1
c | 3
null | 8

+0

lo que es '1 ENTONCES PARA END' – mrN

+0

argumento para' count'. 'COUNT' devuelve la cantidad total de argumentos no nulos. Y 'CASE' tiene el valor predeterminado' ELSE NULL'. – a1ex07

0
select count(*),type 
from [TableName] 
Group By Type 
+0

esto me da filas horizontales – mrN

1

Usted podría intentar algo así como

SELECT COUNT(*) Total, 
     SUM(CASE WHEN type='a' THEN 1 ELSE 0 END) as CountOfA, 
     SUM(CASE WHEN type='b' THEN 1 ELSE 0 END) as CountOfB, 
     SUM(CASE WHEN type='c' THEN 1 ELSE 0 END) as CountOfC, 
FROM Table 
Cuestiones relacionadas