我有一个患者活动表,它记录患者从患者入院到患者出院时的每个活动。下面是表命令疑难解答SQL查询
Create table activity
( activityid int PRIMARY KEY NOT NULL,
calendarid int
admissionID int,
activitydescription varchar(100),
admitTime datetime,
dischargetime datetime,
foreign key (admissionID) references admission(admissionID)
)
的数据看起来像这样:
activityID calendarid admissionID activitydescription admitTime dischargeTime
1 100 10 Patient Admitted 1/1/2013 10:15 -1
2 100 10 Activity 1 -1 -1
3 100 10 Activity 2 -1 -1
4 100 10 Patient Discharged -1 1/4/2013 13:15
对于每一个定义calendarID,该组admissionid重复。对于给定的calendarid,admissionsid(s)是唯一的。对于我的分析,我想编写一个查询来显示入场时间,日历时间,入场时间和出场时间。
select admissionId, calendarid, admitTime=
(select distinct admitTime
from activity a1
where a1.admisionID=a.admissionID and a1.calendarID=a.calendarid),
dischargeTime=
(select distinct dischargeTime
from activity a1
where a1.admisionID=a.admissionID and a1.calendarID=a.calendarid)
from activity a
where calendarid=100
当我单独分配的数字,它的工作原理,否则就想出了这样的信息:
子查询返回多个值。
我在做什么错?
当以这种方式使用子查询必须只返回一个记录(如明确规定错误消息)。看起来好像你在'activityID'上添加'Order By'的'top 1',它会做你想做的。根据测试数据,它看起来像你可以完全避免子查询,并且将'和activitID = 1'添加到'Where'子句中。 –
其中admitTime!= -1和卸载时间!= -1应该有帮助... –
你可以为此创建一个sql小提琴吗?或者可能提供查询来创建所有必要的表格和一些示例行? –