【发布时间】:2013-04-22 20:02:42
【问题描述】:
我正在尝试创建一个报告以提供来自 SQL Server 数据库的数据。我有 3 张我感兴趣的表格,客户、推荐人、约会。客户可以有 1.* 推荐,推荐可以有 0.* 预约。
在我的报告中,我想显示从收到推荐到第一次预约的平均时间。
我在我的存储过程中尝试上述方法,但收到“无法对包含聚合或子查询的表达式执行聚合函数。”
有没有一种巧妙的方法可以在没有子查询的情况下让它工作?
编辑下面的粗略表结构。
客户 ClientID INT IIDENTITY (pk) 名字 VARCHAR(50) 姓 VARCHAR(50) 出生日期时间
推荐 ReferralID INT IDENTITY (pk) ClientID INT (fk) ReferralRequestReceivedDate DATETIME OrgaisationAreaId INT (fk)
约会 AppintmentID INT IDENTITY (pk) 推荐人 ID INT(fk) 约会日期日期时间 出勤类型 ID INT (fk) AppointmentTypeID INT (fk)
出勤类型 出勤类型ID INT IDENTITY (pk) 名称 VARCHAR(50)
约会类型 AppointmentTypeID INT IDENTITY (pk) 名称 VARCHAR(50)
组织区域 OrgaisationAreaId INT IDENTITY(pk) 名称 VARCHAR(50)
我现有的 proc 有按年龄和出席类型出席的约会计数,如下所示...
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
【问题讨论】:
-
这些表的结构是什么?什么键将它们联系在一起?
-
你为什么要这个没有子查询的工作?
标签: sql tsql aggregate-functions average