表A [PATIENT]有[PATID],[FIRSTVISITDATE]
列表B [APPT]有[APPTID],[PATID],[CREATEDATE]
列表C [注释]有[NOTEID],[NOTETEXT]
列表D [PROCS]有[PROCID],[PATID]
列表E [CHARGE]包含[CHARGEID],[AMOUNT]
列我需要通过PATID为所有患者收取CHARGE(AMOUNT),其中NOTE.NOTETEXT包含'text',而包含'text'的患者的APPT之一对APPTI.CREATEDATE = PATIENT.FIRSTVISITDATE < / p>
如果患者在他们的笔记中预约了“短信”并且他们第一次访问该办公室时,我需要记录患者的费用
其他要点:
CHARGE.CHARGEID = PROC.PROCID
NOTE.NOTEID = APPT.APPTID
由于我对SQL的了解有限,我能够为所有患者求助,无论他们的第一次约会笔记中是否包含“文本”,并且我使用过:
select (SUM(AMOUNT)) as 'Cash Payments' from CHARGE where CHARGEID in
(select PROCID from PROC where PATID in
(select PATID from APPT where APPTID in
(select NOTEID from NOTE where NOTETEXT like '%text%')))
答案 0 :(得分:0)
您可以使用GROUP BY
子句按患者分组AMOUNT
。您可以使用在这些条件下连接表格的内部查询,将患者过滤到注释中text
和FIRSTVISITDATE
= CREATEDATE
的患者。
我没有测试过以下查询,但它应该按照您的要求进行测试。
SELECT pa.PATIENT, SUM(c.AMOUNT) AS 'Cash Payments'
FROM PATIENT pa
INNER JOIN PROCS pr
ON pa.PATID = pr.PATID
INNER JOIN CHARGE c
ON pr.PROCID = c.CHARGEID
WHERE pa.PATIENT IN (
SELECT pa.PATIENT
FROM PATIENT pa
INNER JOIN APPT a
ON pa.PATID = a.PATID
AND pa.FIRSTVISITDATE = a.CREATEDATE
INNER JOIN NOTE n
ON a.APPTID = n.NOTEID
WHERE n.NOTETEXT LIKE '%text%'
)
GROUP BY pa.PATIENT;