在组内分组和计数

A S*_*ker -1 sql sql-server

我有一个场景,我想在分组数据后计算记录.(实际方案包含多个表.)

create table tblXYZ
(
id int,
Age int,
Typ char
)
Run Code Online (Sandbox Code Playgroud)

表包含此数据:

| 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
Run Code Online (Sandbox Code Playgroud)

如果我按年龄申请一组,我会得到:

| Age  | Typ_Count
-------------
| 20   | 2
| 21   | 1
| 22   | 2
| 23   | 3
| 25   | 3
Run Code Online (Sandbox Code Playgroud)

但我想根据每个年龄段的每个特定类型得到typ_count.

期望的结果:

    | Age  | Typ_A_Count | Typ_B_Count
    ---------------------------------
    | 20   | 2           | 0
    | 21   | 0           | 1
    | 22   | 1           | 1
    | 23   | 2           | 1
    | 25   | 1           | 2
Run Code Online (Sandbox Code Playgroud)

谢谢.

mor*_*rgb 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
Run Code Online (Sandbox Code Playgroud)


Mih*_*rna 5

SELECT Age,Typ
FROM tblXYZ
PIVOT
(
 count (Typ) FOR Typ IN ('A','B')
)
Run Code Online (Sandbox Code Playgroud)