Проблема в том, что вы group by
:
- Вы не хотите
group by
SubTotal
при суммировании этого столбца. - И вы нехотите
group by
OrderDate
, когда вы пытаетесь подвести итоги за год. Скорее вы хотите group by
то же вычисление, которое вы выбираете, например DATEPART(YYYY, [OrderDate])
.
Таким образом, ваше исправленное group by
равно:
GROUP BY DATEPART(YYYY, [OrderDate]), SalesPersonID, LastName, FirstName
К вашему сведению: если вы разместите свойвопросы в формате, аналогичном приведенному ниже, например, Минимальный воспроизводимый пример , благодаря которому люди намного легче и с большей вероятностью могут помочь.
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]
, SalesPersonID
, 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, OrderDate, SalesPersonID,LastName, FirstName
GROUP BY DATEPART(YYYY, [OrderDate]), SalesPersonID, LastName, FirstName
ORDER BY [Annee], [Nom du vendeur]
Возвращает:
Nom du vendeur | SalesPersonID | Annee | Ventes
----------------------------------------------------
Alberts Amy | 1 | 2019 | 47
Ansman-Wolfe Pamela | 2 | 2019 | 122