我正在努力通过重罪或轻罪类型调查正确分类/计数调查,并正在寻求一些帮助。我有一个调查数据库,法庭表,每项调查都可能有许多与之相关的指控。对于每项调查,我都需要能够计算它是否是轻罪重罪调查。但是,由于调查可能同时包含重罪指控和轻罪指控,因此我需要查看待处理指控表中的指控类别,以及是否同时包含重罪,即“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。我简直迷路了。
您可以使用子查询或 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;