繁体   English   中英

如何在多个连接多个记录的sql服务器中求和结果量,是否需要一些子查询来完成?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM