#sql-server
#sql-сервер
Вопрос:
Мне нужен процент от продаж каждого человека от общего объема. Я ожидаю 4 записи на SalesPersonID, по одной на каждый год. Я получаю 16 записей на SalesPersonID. Общие итоговые результаты показывают четыре разные суммы за каждый год. Когда я запускаю запрос в одиночку, он получает правильный результат.
WITH gt as (
Select sum(subtotal taxamt) as YearlyGrandTotal
, YEAR(OrderDate) as gtYear
From AdventureWorks2017.Sales.SalesOrderHeader
group by YEAR(OrderDate)
),
it as (
Select SalesPersonID, sum(subtotal taxamt) as IndividualSales
, year(OrderDate) as SalesYear
From AdventureWorks2017.Sales.SalesOrderHeader
where SalesPersonID is not null
Group by SalesPersonID, year(OrderDate)
)
Select SalesPersonID,SalesYear, IndividualSales,YearlyGrandTotal
, 100*(IndividualSales/YearlyGrandTotal) as PercentageTotalRevenue
From gt,it
Group by SalesYear,SalesPersonID,IndividualSales,YearlyGrandTotal
order by SalesPersonID;
Комментарии:
1. Вы перекрестно соединяете
gt
иit
(используя устаревший синтаксис для загрузки). Предположительно, вы хотите присоединиться к year?2.
From gt, it
выполнит «перекрестное объединение», которое создаст 4 строки данныхgt
и 4 строкиit
в 16 строк — именно то, что вы получаете прямо сейчас.3. Присоединение исправило это. Спасибо, но каким будет обновленный синтаксис для этого?