在两列上分组并计算净总SQL查询

时间:2014-03-22 20:10:57

标签: sql sql-server-2008-r2

我发现很难修改现有的SQL查询以将记录分为两列。以下是通过加入来检索多个表中的记录的查询:

SELECT 
    InM.invm_No AS DocNo,
    InM.docs_DocCode,
    D.doctyp_Desc AS DocType,
    L.loc_Desc AS Site,
    InM.sup_Code AS Supplier,
    InD.invd_Qty,
    InD.invd_Rate
FROM 
    [SI_InventoryMaster] InM 
INNER JOIN  
    [SI_DocType] AS D ON InM.doctyp_Code = D.doctyp_Code 
INNER JOIN  
    SI_Supplier S ON InM.sup_Code = S.sup_Code 
INNER JOIN  
    [SI_InventoryDetail] AS InD ON InD.invm_No = InM.invm_No 
                                AND InM.invm_verified = 1 
                                AND InM.docs_DocCode = 'GRN' 
                                AND MONTH (InM.invm_Date) = 12 
                                AND YEAR(InM.invm_date) = 2013 
INNER JOIN 
    SI_Location L ON InD.loc_code = L.loc_Code  
ORDER BY 
    InM.invm_No

结果如下:

enter image description here

我需要通过Site"按DocNo分组记录"并找到每个网站的总金额。总金额将是此结果集中的最后一列,并且它是每个网站的InD.invd_QtyInD.invd_Rate的乘积。

对于DocNo:00000030,有4条CWS商店网站记录,因此其总金额将计算为:7684.999 + 7684.999 + 3000 + 3000 = 21369.998

在此特定示例中,修改后的查询应返回以下结果集:

enter image description here

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:1)

尝试对与这两列关联的所有列进行分组。类似的东西:

SELECT InM.invm_No AS DocNo, InM.docs_DocCode, D.doctyp_Desc AS DocType,
       L.loc_Desc AS Site, InM.sup_Code AS Supplier,
       sum(InD.invd_Qty),
       sum(InD.invd_Rate)
FROM [SI_InventoryMaster] InM INNER JOIN  
     [SI_DocType] AS D
     ON InM.doctyp_Code = D.doctyp_Code INNER JOIN  
     SI_Supplier S
     ON InM.sup_Code = S.sup_Code INNER JOIN  
     [SI_InventoryDetail] AS InD
     ON InD.invm_No = InM.invm_No AND
        InM.invm_verified = 1 AND
        InM.docs_DocCode = 'GRN' AND
        MONTH (InM.invm_Date) = 12 AND
        YEAR(InM.invm_date) = 2013 INNER JOIN 
     SI_Location L
     ON InD.loc_code = L.loc_Code  
GROUP BY InM.invm_No AS DocNo, InM.docs_DocCode, D.doctyp_Desc AS DocType,
         L.loc_Desc AS Site, InM.sup_Code AS Supplier;