oracle查询ORA000907中缺少右括号错误

oracle查询ORA000907中缺少右括号错误,oracle,Oracle,所需表格- SELECT patientid,sum(score) from PATIENTMETABOLIC where FUNCTIONNO = any ('F6','F26','F27') AND patientid IN (SELECT DISTINCT PATIENTID from VISIT where TRUNC(MONTHS_BETWEEN(sysdate, visitdate)) > 6 order by patientid) group by patientid hav

所需表格-

SELECT patientid,sum(score) from PATIENTMETABOLIC where FUNCTIONNO = any ('F6','F26','F27') AND patientid IN (SELECT DISTINCT PATIENTID from VISIT where TRUNC(MONTHS_BETWEEN(sysdate, visitdate)) > 6 order by patientid) group by patientid having sum(score) > 9;
患者代谢-(功能编号、患者编号、评分)

就诊-(就诊号、就诊日期、时间、已付金额、收款号、服务、药物、首席申诉人、患者)

患者(患者ID、姓名、性别、出生日期、地址、州、邮政编码、家庭电话、商务电话、婚姻状况、职业、持续时间、单位、种族、注册日期、GPNo、自然疗法编号)

自然疗法(自然疗法编号、姓名、联系人编号、办公开始时间、办公结束时间、电子邮件地址)

**问题是-**显示过去6个月内未接受过自然疗法且患有严重心脏病的患者的详细信息(即姓名、性别、地址、邮政编码、DOB)(代谢筛查问卷中心脏总分>9)

注意f6、f26、f27是属于心脏病的功能。(分数)表示病情的严重程度,应大于9

我的查询-

SELECT patientid,sum(score) from PATIENTMETABOLIC where FUNCTIONNO = any ('F6','F26','F27') AND patientid IN (SELECT DISTINCT PATIENTID from VISIT where TRUNC(MONTHS_BETWEEN(sysdate, visitdate)) > 6 order by patientid) group by patientid having sum(score) > 9;

在语句中的
子查询中不能有
order by
子句。作为一个简化的例子,这是可行的:

select * from dual
where dummy in (select dummy from dual);
但是这得到了ORA-00907:

select * from dual
where dummy in (select dummy from dual order by dummy);

正如帕特里克·霍夫曼(Patrick Hofman)所提到的,即使它被允许,也不会产生实际效果

因此,在您的情况下,假设您的姓名等是正确的,这应该是可行的:

SELECT patientid,sum(score)
from PATIENTMETABOLIC
where FUNCTIONNO = any ('F6','F26','F27')
AND patientid NOT IN (
  SELECT PATIENTID
  from VISIT
  where TRUNC(MONTHS_BETWEEN(sysdate, visitdate)) > 6
)
group by patientid
having sum(score) > 9;
除了通过
删除
订单外,我还删除了
distinct
,它只是添加了一个无意义的排序操作;我把
中的
改为
中的
而不是
,因为你说你想要的是那些没有看过自然疗法的病人。但我可能弄错了


使用
=ANY
是不寻常的,但是;但是,在同一个语句中混用这一点和中的等价
似乎有些奇怪。我个人会把它改成
中的,尤其是为了避免让人困惑…

谢谢你Alex。。为了得到答案和解释,我理解了,并将其改为IN。它工作得很好。是的,你是对的,不在这里。