我正在尝试使用SUM为基于一个字段的每个单独的部分添加3个记录集的数据,但它不是SUM,它将仅显示每个记录的结果。
我尝试将查询修改为仅限于一个没有运气的表。我尝试使用WHERE和HAVING中的条件,而未进行任何更改。如果删除条件,那么它将正确执行SUM。
SELECT dbo.tbl_Parts.Number,
Sum(dbo.tbl_Msmt_Data.Result) AS Result,
dbo.tbl_Parts.Parts_ID
FROM dbo.tbl_Msmt_Data INNER JOIN dbo.tbl_Parts ON dbo.tbl_Msmt_Data.Part = dbo.tbl_Parts.Parts_ID
WHERE ((dbo.tbl_Msmt_Data.Time_Completed)>GetDate()-60)
GROUP BY dbo.tbl_Parts.Number, dbo.tbl_Parts.Mold,dbo.tbl_Parts.Parts_ID, dbo.tbl_Msmt_Data.Msmt_Spec
HAVING (((dbo.tbl_Msmt_Data.Msmt_Spec)=4000 Or (dbo.tbl_Msmt_Data.Msmt_Spec)=4001 Or (dbo.tbl_Msmt_Data.Msmt_Spec)=4514))
ORDER BY dbo.tbl_Parts.Number;
What I want the output to read is:
Number, Result
1723 590
1724 574
But what I'm getting is:
Number, Result
1723 120
1723 470
1724 112
1724 0
1724 462
其他零件编号以相同的方式出现相同的模式。
答案 0 :(得分:2)
您将获得更多的行,因为选择列表中有多余的列,并且您按过多的列进行分组。另外,您确实应该学习如何使用别名。它将文本墙变成一个很短且易于理解的查询。我还使用dateadd而不是简写形式来计算天数。您可能要小心一点,因为如果要日期,它可能会不准确。
我猜没有可用的示例数据,但这应该非常接近。
SELECT p.Number,
Sum(d.Result) AS Result
FROM dbo.tbl_Msmt_Data d
INNER JOIN dbo.tbl_Parts p ON d.Part = p.Parts_ID
WHERE d.Time_Completed > dateadd(day, -60, GetDate())
GROUP BY p.Number
HAVING d.Msmt_Spec in (4000, 4001, 4514)
ORDER BY p.Number;
答案 1 :(得分:0)
仅按dbo.tbl_Parts.Number分组,而不是:
GROUP BY dbo.tbl_Parts.Number, dbo.tbl_Parts.Mold,
dbo.tbl_Parts.Parts_ID, dbo.tbl_Msmt_Data.Msmt_Spec