Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分组和分组内计数_Sql_Sql Server - Fatal编程技术网

Sql 分组和分组内计数

Sql 分组和分组内计数,sql,sql-server,Sql,Sql Server,我有一个场景,在该场景中,我希望在分组数据后统计记录。(实际场景包含多个表。) 表中包含以下数据: | 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 | 1

我有一个场景,在该场景中,我希望在分组数据后统计记录。(实际场景包含多个表。)

表中包含以下数据:

| 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
但我想根据每个年龄组的每个特定类型得到类型计数

预期结果:

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

谢谢。

您可以像这样计算多个类别:

SELECT Age,Typ
FROM tblXYZ
PIVOT
(
 count (Typ) FOR Typ IN ('A','B')
)
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

请发布您的尝试如果类型为静态或动态透视,您可以使用透视来实现此目的它们必须位于不同的列中吗?你不能按年龄和类型分组吗?如果它们必须在列中,请为每种类型使用case语句。如果您有一个随机数目的类型,那么您需要编写一个动态Piviot,例如:。目前有太多未知因素,无法提出“质量”建议。
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