Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 server 使用Case语句时计算分组计数_Sql Server_Group By_Count_Sql Server 2012_Case - Fatal编程技术网

Sql server 使用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

使用SQL Server 2012-我正在尝试从数据库中统计不同实体的数量,按其国家和地区以及公司类型进行分组。这后一部分就是问题所在——因为“类型”太多了,所以我尝试将它们分为三类:公共、私人,并使用案例陈述将所有其他内容都归入“其他”

查询生成我想要的输出,但是我无法让查询将计数分组到我选择的类别中。我最初在主select查询中有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 新加坡 亚洲
问题出在您的
分组依据
,您希望按您的计算所包含的
[实体类型]
分组,而不是
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表达式而不是语句。谢谢,似乎我没有发现重复的行!!谢谢,我好像没注意到那句重复的台词!!