2011-01-12 38 views
5

OK,這裏是我的表看起來像SQL查詢來獲取總行及總行符合特定條件

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

現在,我需要一個查詢,可以給我這個輸出...

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

我只知道使用count(*),以獲得總集,但怎麼做剩餘

回答

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 

在後一種情況下,您將獲得結果:

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

+0

什麼是'THEN 1 END` FOR – mrN 2011-01-12 07:29:49

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

這給了我水平行 – mrN 2011-01-12 07:45:49

1

你可以嘗試像

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