#sql-server
#sql-сервер
Вопрос:
Попытка вернуть продажи по годам для каждого конкретного продавца в одном столбце и процент от общего объема продаж в следующем столбце.
Подзапрос должен возвращать общую сумму всех продаж, чтобы можно было вычислить процент. Но процент неверен, потому что я не могу агрегировать OrderDate, потому что тогда он не будет распознан в инструкции join (невозможно сгруппировать по ГОДУ (OrderDate). Любая информация была бы отличной.
SELECT Year(t1.OrderDate) as SalesYear, sum(SubTotal TaxAmt) as Sales,
sum(SubTotal TaxAmt) / sum(YearlyGrandTotal) AS [Percent]
FROM [AdventureWorks2017].[Sales].[SalesOrderHeader] t1
INNER JOIN (
SELECT OrderDate,Year(OrderDate) as O, sum(SubTotal TaxAmt) as
YearlyGrandTotal
FROM Sales.SalesOrderHeader
GROUP BY (OrderDate)
) AS [Total] ON t1.OrderDate = Total.OrderDate
where SalesPersonID = 275
GROUP BY Year(t1.OrderDate)
Ответ №1:
С помощью group by year(orderdate)
получите sales
из salespersonid = 275
и yearlygrandtotal
и используйте его в качестве подзапроса для вычисления процента:
select
t.salesyear,
t.sales,
100.0 * t.sales / t.yearlygrandtotal percentage
from (
select
year(orderdate) salesyear,
sum(case when salespersonid = 275 then subtotal taxamt else 0 end) sales,
sum(subtotal taxamt) yearlygrandtotal
from [AdventureWorks2017].[Sales].[SalesOrderHeader]
group by year(orderdate)
) t