SQL查询帮助(可能使用JOIN?)

时间:2016-09-14 17:00:47

标签: mysql sql-server

表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%')))

1 个答案:

答案 0 :(得分:0)

您可以使用GROUP BY子句按患者分组AMOUNT。您可以使用在这些条件下连接表格的内部查询,将患者过滤到注释中textFIRSTVISITDATE = 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;