2016-09-14 51 views
1

表A PATIENT]具有列[PATID],[FIRSTVISITDATE]SQL查詢的幫助(可能使用JOIN?)

表B [APPT]具有列[APPTID],[PATID],[CREATEDATE]

表C [注]具有列[NOTEID],[NOTETEXT]

表d [PROCS]具有柱[PROCID],[PATID]

表E [CHARGE]具有列[CHARGEID],[ AMOUNT]

我需要總結由PATID對所有患者進行充電(AMOUNT),其中NOTE.NOTETEXT包含「文本」,並且包含「文本」的患者的APPT之一具有APPT.CREATEDATE =患者.FIRSTVISITDATE

簡而言之,我需要綜上所述患者的費用,如果他們有在他們的筆記「文本」,並與「文」約會的約會是他們的辦公室第一次訪問

其他關鍵點:

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

對不起,但你需要*絕望*是找到一個SQL教程,並通過它的工作方式。你寫的查詢可能會產生你想要的結果,但是如果你得到的數據不止一行,它的性能將比爬登珠穆朗瑪峯的烏龜慢。 –

+1

我意識到我對SQL很少了解,這就是爲什麼我在這裏發佈它,但如果這個網站不是答案,那麼我很抱歉。我認爲這是什麼這是用於 –

+0

這是爲了答案,但只是回答這個問題是不會讓你受益的。你需要更多的指導,而不是隻爲你寫一個查詢的人。這不是一個教程網站,我們教授基礎知識並提供長期指導。 –

回答

0

可以使用GROUP BY子句組病人的AMOUNT。您可以使用註釋中的textFIRSTVISITDATE = CREATEDATE中的text過濾您的患者,使用內部查詢將這些條件上的表連接起來。

我還沒有測試過下面的查詢,但它應該做你在問什麼。

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;