Sql server 使用Case语句时计算分组计数
使用SQL Server 2012-我正在尝试从数据库中统计不同实体的数量,按其国家和地区以及公司类型进行分组。这后一部分就是问题所在——因为“类型”太多了,所以我尝试将它们分为三类:公共、私人,并使用案例陈述将所有其他内容都归入“其他” 查询生成我想要的输出,但是我无法让查询将计数分组到我选择的类别中。我最初在主select查询中有CASE语句,但在其他地方找到类似的问题后,我将其移动到子查询,但我遇到了相同的问题。下面的查询和示例输出:Sql server 使用Case语句时计算分组计数,sql-server,group-by,count,sql-server-2012,case,Sql Server,Group By,Count,Sql Server 2012,Case,使用SQL Server 2012-我正在尝试从数据库中统计不同实体的数量,按其国家和地区以及公司类型进行分组。这后一部分就是问题所在——因为“类型”太多了,所以我尝试将它们分为三类:公共、私人,并使用案例陈述将所有其他内容都归入“其他” 查询生成我想要的输出,但是我无法让查询将计数分组到我选择的类别中。我最初在主select查询中有CASE语句,但在其他地方找到类似的问题后,我将其移动到子查询,但我遇到了相同的问题。下面的查询和示例输出: SELECT COUNT(DISTINCT ent.f
SELECT COUNT(DISTINCT ent.factset_entity_id) AS Count,
d.[Entity Type],
YEAR(r.repr_timeslot_date) AS [Year],
cty.country_desc AS Country,
reg.region_desc AS Region
FROM
(SELECT
entity_type_code,
CASE
WHEN entity_type_code = 'PUB'
THEN 'Public'
WHEN entity_type_code IN ('PVT', 'HOL', 'JVT', 'SUB')
THEN 'Private'
ELSE 'Other'
END AS [Entity Type]
FROM
ref_v2.entity_type_map) AS d
JOIN
sym_v1.sym_entity AS ent ON ent.entity_type = d.entity_type_code
JOIN
sdfdemo.sym_v1.sym_sec_entity AS se ON ent.factset_entity_id = se.factset_entity_id
JOIN
repr_v1.repr_factset_id_map AS reprisk ON se.fsym_id = reprisk.factset_id
JOIN
repr_v1.repr_rri AS r ON r.repr_company_id = reprisk.provider_id
JOIN
ref_v2.country_map AS cty ON cty.iso_country = ent.iso_country
JOIN
ref_v2.region_map AS reg ON reg.region_code = cty.region_code
JOIN
ref_v2.entity_type_map AS ety ON ety.entity_type_code = ent.entity_type
WHERE
reprisk.id_end_date IS NULL
AND reprisk.factset_id IS NOT NULL
AND ent.iso_country IN ('SG')
AND YEAR(r.repr_timeslot_date) = '2020'
AND r.repr_rating IS NOT NULL
GROUP BY
d.[Entity Type], cty.country_desc, reg.region_desc,
ent.entity_type, YEAR(r.repr_timeslot_date);
电流输出:
计数
实体类型
年
国家
区域
1.
其他
2020
新加坡
亚洲
2.
其他
2020
新加坡
亚洲
12
其他
2020
新加坡
亚洲
2.
其他
2020
新加坡
亚洲
3.
私有的
2020
新加坡
亚洲
455
公开的
2020
新加坡
亚洲
5.
私有的
2020
新加坡
亚洲
问题出在您的
分组依据
,您希望按您的计算所包含的[实体类型]
分组,而不是sym\u v1.sym\u实体
中的分组
将您的分组依据
子句更改为:
按d分组[实体类型],
cty.country_desc,
注册地区描述,
年份(r.repr\u时隙\u日期);
在这里,我已经从您的groupby
中删除了ent.entity\u type
,因为您实际上不想对其进行分组,所以您希望对已包含的计算列进行分组
这就是导致重复的原因。问题在于您的
分组依据
,您希望按照您的计算结果分组[实体类型]
而不是sym_v1.sym_Entity
中的分组
将您的分组依据
子句更改为:
按d分组[实体类型],
cty.country_desc,
注册地区描述,
年份(r.repr\u时隙\u日期);
在这里,我已经从您的groupby
中删除了ent.entity\u type
,因为您实际上不想对其进行分组,所以您希望对已包含的计算列进行分组
这就是造成重复的原因。FYI:这是一个case表达式而不是语句。FYI:这是一个case表达式而不是语句。谢谢,似乎我没有发现重复的行!!谢谢,我好像没注意到那句重复的台词!!