SQL子选择返回多个值

SQL子选择返回多个值,sql,sql-server,tsql,subquery,Sql,Sql Server,Tsql,Subquery,我想按地点统计在活动约会的同一天进行的未来约会。我预计在给定日期范围内,每个患者ID会有多个计数。我不确定我是否需要一个临时表或者一个子查询是否可以工作 从下面的代码中,这是我得到的错误: 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情 定义: 约会\日期时间-(日期)是实际的约会事件 DateTime_Scheduled-(Date)是未来约会的记录时间戳 描述-(文本)是位置描述 患者ID-(int)是唯一的患者ID 约会ID-(int)是唯一的约会

我想按地点统计在活动约会的同一天进行的未来约会。我预计在给定日期范围内,每个患者ID会有多个计数。我不确定我是否需要一个临时表或者一个子查询是否可以工作

从下面的代码中,这是我得到的错误:

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情

定义:

  • 约会\日期时间-(日期)是实际的约会事件
  • DateTime_Scheduled-(Date)是未来约会的记录时间戳
  • 描述-(文本)是位置描述
  • 患者ID-(int)是唯一的患者ID
  • 约会ID-(int)是唯一的约会ID
SQL

选择
位置说明
,计数(应用程序约会\u ID)
来自[Ntier_HARH].[PM].[Appoints]应用程序
加入[Ntier_HARH].[PM].[Resources]res
在res.Resource\u ID=app.Resource\u ID上
加入[Ntier_HARH].[PM].[Practices]博士
关于doc.practices\u ID=res.practices\u ID
加入[Ntier_HARH].[PM].[Scheduling_Locations]loc
在loc.Scheduling\u Location\u ID=app.Scheduling\u Location\u ID上
哪里
演员阵容(app.DateTime_计划为日期)='2017-01-16'
和app.status“X”
和演员(app.Appointment_DateTime as date)=
(选择cast(日期时间\计划为日期)
来自[恩蒂尔哈][下午][预约]
其中患者ID=应用程序患者ID)
按位置说明分组

您可以在中使用
,而不是
=

where 

 cast(app.DateTime_Scheduled as date) = '2017-01-16' 
 and app.status <> 'X'
 and cast(app.Appointment_DateTime as date) IN (Select cast(DateTime_Scheduled as date) from [Ntier_HARH].[PM].[Appointments] where Patient_ID = app.Patient_ID)

 group by loc.Description
在哪里
演员阵容(app.DateTime_计划为日期)='2017-01-16'
和app.status“X”
并在(从[Ntier\u HARH].[PM].[Appointments]中选择cast(DateTime\u Scheduled as date),其中Patient\u ID=app.Patient\u ID)
按位置说明分组

您不也需要按患者分组吗?如果只希望按位置计算约会数,则不需要子查询。我也不明白为什么另外两张桌子是必要的

SELECT l.Description, Count(a.Appointment_ID)

FROM [Ntier_HARH].[PM].[Appointments] a
   join [Ntier_HARH].[PM].[Scheduling_Locations] l 
      on l.Scheduling_Location_ID = a.Scheduling_Location_ID

where cast(a.DateTime_Scheduled as date) = '2017-01-16' 
   and a.status <> 'X'

group by l.Description
选择l.描述、计数(a.约会\U ID)
从[恩蒂尔哈][下午][约会]a
加入[Ntier_HARH].[PM].[Scheduling_Locations]l
在l.Scheduling\u Location\u ID=a.Scheduling\u Location\u ID上
演员阵容(a.DateTime_计划为日期)='2017-01-16'
a.状态“X”
按l.说明分组

查看查询,我相信您需要在子查询中聚合
min
max
或者您可以使用
Row\u Number
来避免子查询。您不也需要按患者ID分组吗?我只想计算应用ID,如果每个患者ID上的日期匹配,而不是任何匹配的日期。就是这样!男孩就是这么简单。
SELECT l.Description, Count(a.Appointment_ID)

FROM [Ntier_HARH].[PM].[Appointments] a
   join [Ntier_HARH].[PM].[Scheduling_Locations] l 
      on l.Scheduling_Location_ID = a.Scheduling_Location_ID

where cast(a.DateTime_Scheduled as date) = '2017-01-16' 
   and a.status <> 'X'

group by l.Description