如何解决使用 Case Statement
使用 sql Server 2012 - 我试图从数据库中完成不同实体的计数,按其国家和地区以及它们所属的公司类型进行分组。后一块是问题 - 因为有太多的“类型”,我试图将它们分为 3 类:公共、私有和使用 case 语句将所有其他所有内容都放入“其他”中。
查询生成了我想要的输出,但是我无法让查询将计数分组到我选择的类别中。我最初在主选择查询中有 CASE 语句,但在其他地方找到类似问题后,我将其移至子查询,但遇到了同样的问题。使用示例输出查询以下内容:
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 | 新加坡 | 亚洲 |
所需输出:
计数 | 实体类型 | 年份 | 国家 | 区域 |
---|---|---|---|---|
8 | 私人 | 2020 | 新加坡 | 亚洲 |
455 | 公开 | 2020 | 新加坡 | 亚洲 |
17 | 其他 | 2020 | 新加坡 | 亚洲 |
非常感谢任何建议!
解决方法
问题出在您的 GROUP BY
中,您想根据计算出的 [Entity Type]
而不是 sym_v1.sym_entity
中的那个分组。
将您的 GROUP BY
子句更改为:
GROUP BY d.[Entity Type],cty.country_desc,reg.region_desc,YEAR(r.repr_timeslot_date);
在这里,我已从您的 ent.entity_type
中删除了 GROUP BY
,因为您实际上并不想对其进行分组,而是想对已包含的计算列进行分组。>
这就是导致您重复的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。