2016-01-20 91 views
-1

我有一個場景,我想在分組數據後對記錄進行計數。 (實際方案包含多個表。)分組依據和組內計數

create table tblXYZ 
(
id int, 
Age int, 
Typ char 
) 

表包含了這樣的數據:

| ID | Age | Typ 
------------------ 
| 1 | 20 | A 
| 2 | 20 | A 
| 3 | 21 | B 
| 4 | 22 | B 
| 5 | 22 | A 
| 6 | 23 | B 
| 7 | 23 | A 
| 8 | 23 | A 
| 9 | 25 | B 
| 10 | 25 | B 
| 11 | 25 | A 

如果我申請一組按年齡,我會得到:

| Age | Typ_Count 
------------- 
| 20 | 2 
| 21 | 1 
| 22 | 2 
| 23 | 3 
| 25 | 3 

但我想根據每個年齡組的每種特定類型獲取typ_count。

期望的結果:

| Age | Typ_A_Count | Typ_B_Count 
    --------------------------------- 
    | 20 | 2   | 0 
    | 21 | 0   | 1 
    | 22 | 1   | 1 
    | 23 | 2   | 1 
    | 25 | 1   | 2 

感謝。

+2

請發表您嘗試 –

+0

你可以使用一個支點,如果類型是靜態的還是動態的支點來實現這一 –

+1

難道他們必須要在不同的列?你不能按年齡和類型分組嗎?如果他們必須在列中使用每種類型的case語句。如果你有一個隨機數的類型,那麼你需要寫一個動態的Piviot,如:http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query。太多的未知因素在這個時候提出「優質」建議。 – xQbert

回答

6

你可以指望多個類別是這樣的:

SELECT 
    Age, 
    COUNT(CASE WHEN Typ = 'A' THEN 1 ELSE NULL END) AS CountTypA, 
    COUNT(CASE WHEN Typ = 'B' THEN 1 ELSE NULL END) AS CountTypB 
FROM tblXYZ 
GROUP BY Age 
4
SELECT Age,Typ 
FROM tblXYZ 
PIVOT 
(
count (Typ) FOR Typ IN ('A','B') 
)