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

Mysql SQL查询帮助(可能使用JOIN?),mysql,sql-server,Mysql,Sql Server,表A[患者]有[PATID]、[FIRSTVISITDATE]列 表B[APPT]有[APPTID]、[PATID]、[CREATEDATE]列 表C[注]有[NOTEID]、[NOTETEXT]列 表D[PROCS]有[PROCID]、[PATID]列 表E[费用]有[费用ID]、[金额]列 对于NOTE.NOTETEXT包含“text”且包含“text”的患者的其中一个APPT中有一个APPT.CREATEDATE=到PATIENT.FIRSTVISITDATE的所有患者,我需要按PATID

表A[患者]有[PATID]、[FIRSTVISITDATE]列

表B[APPT]有[APPTID]、[PATID]、[CREATEDATE]列

表C[注]有[NOTEID]、[NOTETEXT]列

表D[PROCS]有[PROCID]、[PATID]列

表E[费用]有[费用ID]、[金额]列

对于NOTE.NOTETEXT包含“text”且包含“text”的患者的其中一个APPT中有一个APPT.CREATEDATE=到PATIENT.FIRSTVISITDATE的所有患者,我需要按PATID合计费用(金额)

简单地说,如果患者的笔记中有“文本”预约,并且该“文本”预约是他们第一次访问办公室,那么我需要计算患者的费用

其他要点:

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

您可以使用
groupby
子句按患者对
金额进行分组。您可以使用内部查询将患者筛选为注释中带有
文本的患者,以及
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;

您可以使用
groupby
子句按患者对
金额进行分组。您可以使用内部查询将患者筛选为注释中带有
文本的患者,以及
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;

很抱歉,但您迫切需要的是找到一个SQL教程,并以自己的方式完成它。您编写的查询可能会产生您想要的结果,但是如果您获得的数据超过几行,那么它的性能将比爬珠穆朗玛峰的乌龟慢。我意识到我对SQL知之甚少,这就是我将其发布在此处的原因,但如果此网站不提供答案,那么我很抱歉。我想这是用来回答的,但简单地回答这个问题对你没有好处。你需要更多的指导,而不仅仅是有人为你写一个查询。这不是一个我们教授基础知识并提供长期指导的教程网站。我看到问题被标记为mysql和sql server。这是两个完全不同的数据库引擎。您需要编辑此问题以标记正确的数据库类型,并且只标记正确的数据库类型。抱歉,但您迫切需要的是找到一个SQL教程,并以自己的方式完成它。您编写的查询可能会产生您想要的结果,但是如果您获得的数据超过几行,那么它的性能将比爬珠穆朗玛峰的乌龟慢。我意识到我对SQL知之甚少,这就是我将其发布在此处的原因,但如果此网站不提供答案,那么我很抱歉。我想这是用来回答的,但简单地回答这个问题对你没有好处。你需要更多的指导,而不仅仅是有人为你写一个查询。这不是一个我们教授基础知识并提供长期指导的教程网站。我看到问题被标记为mysql和sql server。这是两个完全不同的数据库引擎。您需要编辑此问题以标记正确的数据库类型,并且仅标记正确的数据库类型。