Агрегирование по группам в подзапросе - PullRequest
0 голосов
/ 06 апреля 2019

Попытка вернуть продажи по годам для каждого конкретного продавца в одном столбце и процент от общего объема продаж в следующем столбце.

Подзапрос должен возвращать общую сумму всех продаж, чтобы можно было рассчитать процент.Но процент неправильный, потому что я не могу агрегировать OrderDate, потому что тогда он не будет распознан в операторе соединения (Невозможно сгруппировать по YEAR (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 Ответ

1 голос
/ 06 апреля 2019

С помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...