Я пытаюсь создать отчет для предоставления данных из базы данных SQL Server. У меня есть 3 таблицы, которые меня интересуют: «Клиент», «Реферал», «Назначение». Клиент может иметь 1.* рефералов, а реферал может иметь 0.* назначенных ему встреч.
В своем отчете я хочу показать среднее время от получения направления до первой встречи.
Я пытаюсь сделать это в своей хранимой процедуре, но получаю сообщение «Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос».
Есть ли способ заставить это работать без подзапроса, который вы можете придумать?
Изменить Примерную структуру таблицы ниже.
Клиент ClientID INT IIDENTITY (pk) Имя VARCHAR(50) Фамилия VARCHAR(50) Дата рождения DATETIME
Referral ReferralID INT IDENTITY (pk) ClientID INT (fk) ReferralRequestReceivedDate DATETIME OrgaisationAreaId INT (fk)
Назначение AppintmentID INT IDENTITY (pk) ReferralId INT(fk) AppointmentDate DATETIME AttendanceTypeId INT (fk) AppointmentTypeID INT (fk)
Типы посещаемости AttendanceTypeID INT IDENTITY (pk) Имя VARCHAR(50)
AppointmentTypes AppointmentTypeID INT IDENTITY (pk) Имя VARCHAR(50)
OrganizationArea OrgaisationAreaId INT IDENTITY(pk) Name VARCHAR(50)
Моя существующая процедура имеет подсчет встреч, на которых присутствовал возраст и тип посещаемости, как показано ниже...
SELECT OA.Name,
COUNT(CASE WHEN AppointmentTypeId IN(1,3)
AND AppointmentDate BETWEEN '27 Jan 2013' AND '13 Apr 2013'
THEN AppointmentId END) AS AppsBooked,
AVG(DATEDIFF(d, ReferralRequestReceivedDate, MIN(A.AppointmentDate)))
AS AvgAllocationWaitTime
FROM OrganisationAreas OA
LEFT OUTER JOIN Clients C
ON OA.OrganisationAreaId = C.OrganisationAreaId
LEFT OUTER JOIN IaptReferrals R
ON C.ClientId = R.ClientId
LEFT OUTER JOIN IaptAppointments A
ON R.IaptReferralId = A.Referral_IaptReferralId
GROUP BY OA.OrganisationAreaId, OA.Name