如评论中所述,
从group by子句中删除小计,
汇总值不必在group by子句中。
,
问题出在您的group by
:
- 在汇总该列时,您不想
group by
SubTotal
。
- 当您试图对一年的总数求和时,您不想
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