如何对一对多关系中的特定记录进行计数/分类?

问题描述 投票:0回答:1

我正在努力通过重罪或轻罪类型调查正确分类/计数调查,并正在寻求一些帮助。我有一个调查数据库,法庭表,每项调查都可能有许多与之相关的指控。对于每项调查,我都需要能够计算它是否是轻罪重罪调查。但是,由于调查可能同时包含重罪指控和轻罪指控,因此我需要查看待处理指控表中的指控类别,以及是否同时包含重罪,即“M”类、“X”类、 “1”、“2”、“3”或“4”以及轻罪等级“A”、“B”或“C”则必须是重罪调查,因为这是最严重的犯罪行为。如果关联指控均为“M”、“X”、“1”、“2”、“3”或“4”类,则默认为重罪调查,如果关联指控均为“A”类'、'B' 或 'C' 则默认为轻罪调查。以下是待处理费用表的示例:

身份证 被告ID 法院ID 班级
9f78778d 658d053c 10353578 3
a53a4841 658d053c 10353578 2
a9d2c5a2 658d053c 10353578 A
daf26cb0 658d053c 10353578 3

Court 表(父表)与 Pending Charge 表(子表)之间的关系是通过 CourtID 列实现的。您可以在这里看到,这项调查(CourtID 栏)包括 4 项指控、3 项重罪和 1 项轻罪。因为这项调查至少包括 1 项重罪,所以我需要将其算作 1 项重罪调查。

我尝试创建一个基本查询,如下所示:

SELECT
    c.CountyID,
    SUM(IIF(pc.Class = 'M',1,0)) + SUM(IIF(pc.Class = 'X',1,0)) AS [Felony],
    SUM(IIF(pc.Class = 'A',1,0)) AS [Misdemeanor]
FROM vCourt c 
JOIN vPendingCharges pc ON pc.CourtID = c.ID
GROUP BY c.CountyID

我根本不相信我走在正确的道路上。我期望/希望创建的是所有县 (CountyID) 的列表以及每个县的重罪或轻罪调查数量。像这样的东西:

数重罪 轻罪数量
部分县 7 20
其他县 3 10

我的表达式显然是在计算 Pending Charge 表的 Class 列中存在的所有 M 和所有 X。我简直迷路了。

sql sql-server group-by count grouping
1个回答
0
投票

您可以使用子查询或 CTE 作为帮助器。即:

select ChargeType, count(*)
from (
   Select case 
      when exists (select * from Charges ch 
                   where ch.CourtId = c.CourtId and ch.Class in ('A','B', 'C')) 
      then 'Misdemeanors' else 'Felony' end as ChargeType
from Courts c
) tmp
group by ChargeType;
© www.soinside.com 2019 - 2024. All rights reserved.