[英]How to Sum a result quantity in sql server with multiple records which several joins, does it need some subquery to do it?
我想获取我正在编写的查询的SUM记录
过去,我已经完成了简单的SUM聚合,但是我有些生疏,想知道获得正确结果的最佳方法。
带有数量(imaps_inv)的表的示例
ste_id ste_acct_id stk_id qty
1 1 001 5
1 2 001 10
1 3 001 15
因此查询不应返回3条记录,而只能返回1条记录,因此查询结果应为
Site ID Stocking ID Qty
1 001 30
这样你就可以看到我要退货了
inv.qty
是我希望inv.qty
的“数量”字段,下面是我基于这些表编写的查询。
SELECT ste.ste_id, ty.ste_ty_id, inv.qty
FROM dbo.imaps_inv inv WITH(NOLOCK)
INNER JOIN dbo.imaps_ste ste WITH(NOLOCK)
ON inv.ste_id = ste.ste_id
INNER JOIN dbo.imaps_ste_ty ty
ON ty.ste_ty_id = ste.ste_ty_id
INNER JOIN dbo.imaps_stk_acct acct WITH(NOLOCK)
ON acct.ste_id = ste.ste_id
INNER JOIN dbo.imaps_stk_acct_ty aty WITH(NOLOCK)
ON aty.stk_acct_ty_id = acct.stk_acct_ty_id
WHERE
ste.inact_ind = 0
AND LTRIM(RTRIM(aty.stk_acct_ty_nm)) = 'Good'
AND acct.rsv_ind = 0
AND acct.inact_ind = 0
请让我知道我可以提供哪些帮助(屏幕截图,架构等...)
更新
嗯,我只得到19条记录,而这位同事说:“哦,不。你应该得到16,000条记录...
我说好,我正在使用此ste_id(站点ID),当我向他发送此查询时
SELECT distinct ste_id from [dbo].[imaps_inv] ( 20 records)
他说,要添加stk_id(股票编号)
SELECT distinct ste_id, stk_id from [dbo].[imaps_inv] (15,910 records)
因此,我更新了查询,最终得到了适当的结果,并认为我将通过人员答案的组合来更新我的问题,并调整代码,因为其他人当然没有模式和记录等。
最终工作查询
SELECT ste.ste_id as 'Site ID', inv.stk_id as 'Stocking ID', SUM(inv.qty) Qty
FROM dbo.imaps_inv inv WITH(NOLOCK)
INNER JOIN dbo.imaps_ste ste WITH(NOLOCK)
ON inv.ste_id = ste.ste_id
INNER JOIN dbo.imaps_ste_ty ty
ON ty.ste_ty_id = ste.ste_ty_id
INNER JOIN dbo.imaps_stk_acct acct WITH(NOLOCK)
ON acct.ste_id = ste.ste_id
INNER JOIN dbo.imaps_stk_acct_ty aty WITH(NOLOCK)
ON aty.stk_acct_ty_id = acct.stk_acct_ty_id
WHERE
ste.inact_ind = 0
AND LTRIM(RTRIM(aty.stk_acct_ty_nm)) = 'Good'
AND acct.rsv_ind = 0
AND acct.inact_ind = 0
GROUP BY ste.ste_id, inv.stk_id
使用SUM
:
SELECT ste.ste_id,
SUM(inv.qty) Qty
FROM dbo.imaps_inv inv WITH(NOLOCK)
INNER JOIN dbo.imaps_ste ste WITH(NOLOCK)
ON inv.ste_id = ste.ste_id
INNER JOIN dbo.imaps_ste_ty ty
ON ty.ste_ty_id = ste.ste_ty_id
INNER JOIN dbo.imaps_stk_acct acct WITH(NOLOCK)
ON acct.ste_id = ste.ste_id
INNER JOIN dbo.imaps_stk_acct_ty aty WITH(NOLOCK)
ON aty.stk_acct_ty_id = acct.stk_acct_ty_id
WHERE
ste.inact_ind = 0
AND LTRIM(RTRIM(aty.stk_acct_ty_nm)) = 'Good'
AND acct.rsv_ind = 0
AND acct.inact_ind = 0
GROUP BY ste.ste_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.