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

How to count/classify specific records in a one to many relationship?

提问人:Haus 提问时间:11/1/2023 最后编辑:Cetin BasozHaus 更新时间:11/2/2023 访问量:65

问:

enter image description here非常感谢您一直以来的帮助。我希望创建一个我的员工服务的县列表,以及一个轻罪调查数量的专栏,以及另一个重罪调查数量的专栏。 未决指控和法院表格概述如下。Court 是 Pending Charges 的父级,Pending Charge 表的 CourtID 列是 Court 表的 ID 列 =,即 JOIN vPendingCharges pc ON pc。CourtID = c.ID。

法庭桌:

编号 被告身份证 县ID
00035ed9 编号:2A1E50F9 豪斯县
000B2A8C F3dc3251系列 索尔县

待处理费用表:

编号 被告身份证 法院ID
9F78778D 编号:2A1E50F9 00035ed9 3
编号:A53A4841 编号:2A1E50F9 00035ed9 2
编号:a9d2c5a2 F3dc3251系列 000B2A8C 一个
DAF26CB0型 F3dc3251系列 000B2A8C 一个

期望输出:

数字重罪 数字轻罪
豪斯县 1 0
索尔县 0 1

我也会摆弄你已经提供的东西,这很棒。也许奇迹般地,我首先到达了我想去的地方?.再次感谢您的帮助。

SQL-Server 分组依据 计数 分组

评论


答:

0赞 Cetin Basoz 11/1/2023 #1

您可以使用子查询或 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;

编辑:

WITH tmp AS (SELECT CountyID, CASE WHEN EXISTS 
  (SELECT *
   FROM PendingCharge AS pc
   WHERE c.ID=pc.CourtID AND pc.Class IN ('M', 'X', '1', '2', '3', '4')) 
      THEN 'Felony' 
      ELSE 'Misdemeanor' 
   END AS ChargeType
   FROM Court AS c)
SELECT CountyID, 
  SUM(CASE WHEN ChargeType='Felony' THEN 1 ELSE 0 END) AS [Number Felony], 
  SUM(CASE WHEN ChargeType='Misdemeanor' THEN 1 ELSE 0 END) AS [Number Misdemeanor]
FROM tmp
GROUP BY CountyID;

这是 DBFiddle 演示。

评论

1赞 jarlh 11/1/2023
该 FROM 子句子查询称为派生表
0赞 Haus 11/1/2023
非常感谢您的帮助。一旦我发现我没有正确描述未决指控表和法院表之间的关系。我能够让它正常工作。Pending Charge 表的 CourtID = Court 表的 ID。这很好用。我将稍微玩一下,因为我需要按县来组织它,即 A 县有 10 项重罪和 35 项轻罪。有什么简单的技巧可以将表达式从一行更改为一列吗?再次感谢您的帮助!
0赞 Cetin Basoz 11/1/2023
@Haus,是的。如果您为两个表提供了一些示例数据和所需的输出,那么我可以提供 SQL 和 fiddle 演示。
0赞 Haus 11/1/2023
非常感谢您一直以来的帮助。我试图编辑帖子以包含表格示例,但编辑没有保存,或者我做错了什么。我无法将表格添加到这些“注释”中,也无法设置任何格式以使其易于理解。如果我上面提供的内容无法理解,我将再次破解它。再次感谢您的帮助!
1赞 Haus 11/2/2023
@CetinBasoz 这太完美了!非常感谢你,这将很有帮助,因为我需要将相同的逻辑应用于数据的其他区域!谢谢!