使用SUM函数根据ID和名称将我的销售额加在一起

我通过SSMS创建了一个请求:

SELECT 
    concat(LastName,' ',FirstName) AS [Nom du vendeur],SalesPersonID,DATEPART(YYYY,[OrderDate]) AS [Annee],FORMAT(SUM(soh.SubTotal),'#,#00.') AS [Ventes]
FROM 
    Sales.SalesOrderHeader AS soh 
INNER JOIN 
    Person.Person AS pp ON soh.SalesPersonID = pp.BusinessEntityID
WHERE 
    pp.PersonType = 'SP' 
    AND soh.OnlineOrderflag = '0' 
    AND OrderDate NOT BETWEEN CONVERT(DATETIME,'01/01/2011',101) AND CONVERT(DATETIME,'12/31/2011',101) 
GROUP BY 
    SubTotal,OrderDate,LastName,FirstName
ORDER BY  
    [Annee],[Nom du vendeur]

这是我的输出:

使用SUM函数根据ID和名称将我的销售额加在一起

正如您在代表销售列的[ventes]列中所看到的那样,销售额不会根据ID号和名称进行累加,但是我确实在选择中使用了SUM()函数。关于我的代码有什么问题的任何想法?

xtc168 回答:使用SUM函数根据ID和名称将我的销售额加在一起

如评论中所述,

从group by子句中删除小计, 汇总值不必在group by子句中。

,

问题出在您的group by

  1. 在汇总该列时,您不想group by SubTotal
  2. 当您试图对一年的总数求和时,您不想group by OrderDate。相反,您想group by进行与选择相同的计算,例如DATEPART(YYYY,[OrderDate])

因此,您更正后的group by是:

GROUP BY DATEPART(YYYY,[OrderDate]),SalesPersonID,LastName,FirstName

仅供参考:如果您以与以下类似的格式发布问题,即Minimal Reproducible Example,则可以使人们更容易地获得帮助。

declare @SalesOrderHeader table (id int,SalesPersonID int,OrderDate datetime,SubTotal money,OnlineOrderFlag varchar(1))
declare @Person table (id int,FirstName varchar(64),LastName varchar(64),BusinessEntityID int,PersonType varchar(2))

insert into @Person (id,BusinessEntityID,FirstName,LastName)
  select 1,1,'Amy','Alberts' union all
  select 2,2,'Pamela','Ansman-Wolfe'

insert into @SalesOrderHeader (SalesPersonID,OrderDate,SubTotal)
  select 1,'5 nov 2019',12.34 union all
  select 1,'6 nov 2019',34.56 union all
  select 2,'7 nov 2019',78.90 union all
  select 2,'8 nov 2019',43.21

SELECT 
  CONCAT(LastName,' ',FirstName) AS [Nom du vendeur],DATEPART(YYYY,[OrderDate]) AS [Annee],FORMAT(SUM(soh.SubTotal),'#,#00.') AS [Ventes]
FROM @SalesOrderHeader AS soh 
INNER JOIN @Person AS pp ON soh.SalesPersonID = pp.BusinessEntityID
--WHERE 
--    pp.PersonType = 'SP' 
--    AND soh.OnlineOrderFlag = '0' 
--    AND OrderDate NOT BETWEEN CONVERT(DATETIME,'01/01/2011',101) AND CONVERT(DATETIME,'12/31/2011',101) 
-- GROUP BY SubTotal,FirstName
GROUP BY DATEPART(YYYY,FirstName
ORDER BY [Annee],[Nom du vendeur]

返回:

Nom du vendeur      | SalesPersonID | Annee | Ventes
----------------------------------------------------
Alberts Amy         | 1             | 2019  | 47
Ansman-Wolfe Pamela | 2             | 2019  | 122
本文链接:https://www.f2er.com/3156282.html

大家都在问