CTE, дающий неожиданный результат

#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. Присоединение исправило это. Спасибо, но каким будет обновленный синтаксис для этого?