Sql 患者在同一天有多个预约,并显示两个预约

Sql 患者在同一天有多个预约,并显示两个预约,sql,Sql,我试图找到在同一天有超过1次预约的患者。然后,我想显示患者可能拥有的所有预约。我是否需要使用子查询来执行此操作?以下是我到目前为止的情况: Select Appt.ID-PatNm as Patient, ApptNum, Sched_ApptType.Prov.Mnemonic as Type, Appt.Provider-Name as Provider, Appt.Dt, Appt.Tm, Appt.Department-Mnemonic As Dept,

我试图找到在同一天有超过1次预约的患者。然后,我想显示患者可能拥有的所有预约。我是否需要使用子查询来执行此操作?以下是我到目前为止的情况:

Select
  Appt.ID-PatNm as Patient,
  ApptNum,
  Sched_ApptType.Prov.Mnemonic as Type,
  Appt.Provider-Name as Provider, 
  Appt.Dt, 
  Appt.Tm,
  Appt.Department-Mnemonic As Dept,
  Appt.SchedulerInits,
  Case $EXTRACT(Appt.InternalStatus,1)
    when 'P' then 'Pending'
    when 'A' then 'Arrived' 
    when 'R' then 'Rescheduled'
  End as Status
From Sched.Appointment Appt 
JOIN Sched_ApptType.Prov ON
  Appt.Department = Sched_ApptType.Prov.Department
  and
  Appt.Provider =  Sched_ApptType.Prov.Provider
  and
  Appt.Type = Sched_ApptType.Prov.ApptType
Where (Appt.Dt) > DATEADD('DD',-120,CURRENT_DATE)
  AND Appt.InternalStatus IN ('P','R','A')
  AND Appt.Department-Mnemonic= 'EYE'
Group By 
  Appt.ID-PatNm,
  Appt.Dt

通过按患者和日期分组,您可以让患者在一天内有多个预约:

select distinct a.id_patnm
from sched.appointment a 
group by a.id_patnm, a.dt
having count(*) > 1
因此,是的,您需要一个子查询:

Where (Appt.Dt) > DATEADD('DD',-120,CURRENT_DATE)
  AND Appt.InternalStatus IN ('P','R','A')
  AND Appt.Department_Mnemonic= 'EYE'
  AND Appt.ID_PatNm IN
  (
    select a.id_patnm
    from sched.appointment a 
    group by a.id_patnm, a.dt
    having count(*) > 1
  )

(顺便说一句:我在这里使用了
id\u patnm
而不是
id patnm
,因为我不知道任何DBMS会允许连字符。在列名中使用连字符时,必须在名称上使用引号,例如
“id patnm”

通过按患者和日期分组,可以让患者在一天内有多个预约:

select distinct a.id_patnm
from sched.appointment a 
group by a.id_patnm, a.dt
having count(*) > 1
因此,是的,您需要一个子查询:

Where (Appt.Dt) > DATEADD('DD',-120,CURRENT_DATE)
  AND Appt.InternalStatus IN ('P','R','A')
  AND Appt.Department_Mnemonic= 'EYE'
  AND Appt.ID_PatNm IN
  (
    select a.id_patnm
    from sched.appointment a 
    group by a.id_patnm, a.dt
    having count(*) > 1
  )

(顺便说一句:我在这里使用了
id\u patnm
而不是
id patnm
,因为我不知道任何DBMS会允许连字符。在列名中使用连字符时,必须在名称上使用引号,例如
“id patnm”

我想你可以为约会id添加一列,这样你就可以得到想要的结果。

我想你可以为约会id添加一列,这样你就可以得到想要的结果。

标记使用的dbms。(因为您有一些非ANSI SQL…)请注意:看到
ID PatNm
提供商名称
部门助记符是很奇怪的。它们看起来像减法,但我认为它们应该是列名,对吗?您的DBMS允许这样做吗?使用标记DBMS。(因为您有一些非ANSI SQL…)请注意:看到
ID PatNm
提供商名称
部门助记符是很奇怪的。它们看起来像减法,但我认为它们应该是列名,对吗?你们的数据库管理系统允许吗?谢谢Thorsten的提示。这就是语法。我尝试运行查询,但收到一个错误,表示查询结束后遇到了输入(where)。它不允许我在Where之前有having count(*)>1。不,
having
groupby
之后,
groupby
Where
之后。如果要将where子句添加到子查询中,请将其放在
分组依据之前。感谢Thorsten提供的提示。这就是语法。我尝试运行查询,但收到一个错误,表示查询结束后遇到了输入(where)。它不允许我在Where之前有having count(*)>1。不,
having
groupby
之后,
groupby
Where
之后。如果要将where子句添加到子查询中,请将其置于
GROUPBY
之前。