Я немного поработал над этим и думаю, что близок к завершению.Мне удалось найти способ, используя CTE a и b и внутреннее соединение, объединить два моих результата.Я ищу возможный способ добавить свой столбец скользящего среднего (с) к этому результату.Но ничего, что я пытаюсь, кажется, не работает.Будем благодарны за любые рекомендации о том, как мне поступить, или как сделать это более идеальным способом.
Изображение:
ALTER FUNCTION [dbo].[fn_rptAppointmentsBreakdown2]
(@startDate DATETIME,
@endDate DATETIME)
RETURNS TABLE
AS
RETURN
(WITH a AS
(
SELECT
calendar_date,
SUM(cIsFS + cIsGB + cIsCH+ cIsGC + cIsWM + cIsTC + cIsAR + cIsPP + cIsC3 + cIsPW) AS 'TotalBookedPRU',
SUM(cShowedUp * cIsFS) + SUM(cShowedUp * cIsCH) +
SUM(cShowedUp * cIsPW) AS Showed,
NULL AS 'Total Booked',
SUM(cIsNoShow * cIsC3) + SUM(cIsNoShow * cIsPW) AS 'No Shows/ Rebooked'
FROM
reports.dbo.vw_Appointments a
WHERE
cAppointmentType = 'Recalls' AND
CONVERT(DATETIME, CONVERT(VARCHAR(8), calendar_date, 112)) BETWEEN @startDate AND @endDate
GROUP BY
calendar_date
),
b AS
(
SELECT
calendar_date,
NULL AS 'Total Booked pru',
NULL AS Showed,
SUM(cIsFS + cIsGB + cIsCH+ cIsGC + cIsWM + cIsTC + cIsAR + cIsPP + cIsC3 + cIsPW) AS 'TotalBooked',
NULL AS 'No Shows/ Rebooked'
FROM
reports.dbo.vw_Appointments a
WHERE
CONVERT(DATETIME, CONVERT(VARCHAR(8), calendar_date, 112)) BETWEEN @startDate AND @endDate
GROUP BY
calendar_date
),
c AS
(
SELECT
a.*, a2.Running_Average AS runningaverage
FROM
a
OUTER APPLY
(SELECT AVG(showed) AS Running_Average
FROM a a2
WHERE a2.calendar_date <= a.calendar_date) a2
)
SELECT
a.calendar_date,
a.TotalBookedPRU,
a.Showed,
b.TotalBooked
FROM
a
INNER JOIN
b ON a.calendar_date = b.calendar_date
)