基于关联表字段统计处置类型数量的SQL查询优化需求
基于关联表字段统计处置类型数量的SQL查询优化需求
看起来你现在需要把关联查询的结果按**处置类型(Disposition)**分组,统计每种处置对应的零件数量,而不是把总QTY重复显示在每一行对吧?我来帮你调整一下SQL语句。
首先先理清楚你的核心需求:
- 关联
tbRecords和tbInspectedParts两张表,通过tbRecords.id和tbInspectedParts.eRecordId关联 - 针对指定的
tbRecords.id(比如示例里的7998),统计每个Disposition类型出现的次数 - 保留
eRecordId、Part这些关键关联字段,同时可以选择保留总检验数量
那可以用GROUP BY子句来实现分组统计,配合COUNT()函数计算每种处置的数量,具体SQL语句如下:
SELECT tbInspectedParts.eRecordId, tbInspectedParts.Disposition, COUNT(tbInspectedParts.id) AS DispositionQty, -- 统计当前处置类型对应的零件数量 tbRecords.QTY AS TotalInspectedQty, -- 可选:保留该记录的总检验数量 tbRecords.Part FROM [mrbDB].[dbo].[tbRecords] INNER JOIN tbInspectedParts ON tbRecords.id = tbInspectedParts.eRecordId WHERE tbRecords.id = 7998 GROUP BY tbInspectedParts.eRecordId, tbInspectedParts.Disposition, tbRecords.QTY, tbRecords.Part ORDER BY tbInspectedParts.Disposition; -- 可选:按处置类型排序,方便查看结果
这条语句执行后,就能得到你想要的结果:
| eRecordId | Disposition | DispositionQty | TotalInspectedQty | Part |
|---|---|---|---|---|
| 7998 | 1 | 1 | 10 | 7845 |
| 7998 | 2 | 2 | 10 | 7845 |
| 7998 | 3 | 4 | 10 | 7845 |
| 7998 | 4 | 2 | 10 | 7845 |
| 7998 | 5 | 1 | 10 | 7845 |
这里给你解释几个关键点:
COUNT(tbInspectedParts.id):因为每个处置记录对应一条tbInspectedParts数据,所以统计id的数量就是该处置类型的零件数GROUP BY后面必须包含所有非聚合的字段(也就是SELECT里除了COUNT之外的字段),这样SQL才能正确分组计算- 如果你不需要显示总检验数量(TotalInspectedQty),直接把它从SELECT和GROUP BY里去掉就行,只保留你需要的字段
另外,如果tbInspectedParts里的Disposition可能存在NULL值,你可以用COUNT(*)代替COUNT(tbInspectedParts.id),不过从你的示例数据来看应该不存在这种情况。
内容来源于stack exchange
相关产品推荐
相关产品推荐

