Не проверено и поэтому может быть пронизано синтаксическими ошибками, но я думаю, вам нужно сделать что-то вроде
- Вставить повторяющиеся функции в базовый CTE
- Создать еще один CTE с месяцемколичество ссылок (1)
- Создайте еще одно CTE с указанием количества дней (1)
- Полное внешнее соединение (2) и (3)
Дополнительно ваш *Предложение 1013 * делает LEFT JOIN
бессмысленным, поэтому я изменил его на INNER JOIN
.
WITH T
AS (SELECT Staff.FirstName,
Staff.LastName,
Staff.StaffID,
Sales.CreationDate
FROM Sales
INNER JOIN Staff
ON Sales.StaffID = Staff.StaffID
INNER JOIN SaleEndorsements
ON Sales.SaleID = SaleEndorsements.SaleID
WHERE SaleEndorsements.EndorsementID = 31),
D
AS (SELECT TOP (10) COUNT(*) AS DayCount,
FirstName + LastName AS FullName,
StaffID
FROM T
WHERE CreationDate BETWEEN DATEADD(DD, DATEDIFF(DD, '', getdate()), '') AND
getdate()
GROUP BY FirstName,
LastName,
StaffID
ORDER BY DayCount DESC),
M
AS (SELECT TOP (10) COUNT(*) AS MonthCount,
FirstName + LastName AS FullName,
FROM T
WHERE CreationDate BETWEEN DATEADD(mm, DATEDIFF(mm, '', getdate()), '') AND
getdate()
GROUP BY FirstName,
LastName,
StaffID
ORDER BY MonthCount DESC)
SELECT ISNULL(M.StaffId, D.StaffId) AS StaffId,
ISNULL(M.FullName, D.FullName) AS FullName,
M.MonthCount,
D.DayCount
FROM M
FULL OUTER JOIN D
ON M.StaffID = D.StaffID