Shahad g
Shahad g

Reputation: 79

How to add inner join to query with multiple joins?

I'm trying to add an inner join to query that was done by someone else, but I keep getting errors; I'm trying to figure out the correct way to add it, the inner join to be added is:

select 
    pa.AdmissionID, pad.AdmissionID, pad.AdmTypeID
from 
    v_dbPatientAdmissions pa
inner join 
    V_DbPatientAdmissionAddition pad on pad.AdmissionID = pa.AdmissionID
where 
    pad.AdmTypeID in (3, 37, 42, 43, 44, 51)

And the query I'm trying to add the inner join to is:

SELECT 
    PA.RegCode UHID, PA.Specialisation, A.CREATEDATE ADM_ORDER, 
    PA.CREATEDATE ADM_DATE,  
    (CAST((DATEDIFF(minute, A.CREATEDATE, PA.CREATEDATE))/60 AS VARCHAR)+' H:'                                 
        + CAST((DATEDIFF(minute,A.CREATEDATE, PA.CREATEDATE))%60 AS VARCHAR)+' M') AS DURATION
FROM 
    (SELECT 
         M.IPID, M.PatientID, A.CREATEDATE 
     FROM 
         v_dbPatientAdvice A
     INNER JOIN 
         v_dbPatientMonitoring M ON M.MonitorID = A.MonitorID
     WHERE 
         A.FollowUpType = 2) A 
INNER JOIN  
    (SELECT 
         PA.PatientID, PA.CREATEDATE, PA.RegCode, S.Specialisation, PA.PatientType
     FROM 
         v_dbPatientAdmissions PA
     INNER JOIN 
         v_dbSpecializations S ON S.SpecialiseID = PA.SpecialiseID) PA ON A.PatientID = PA.PatientID
                                                                       AND PA.PatientType = 2
                                                                       AND PA.CREATEDATE > A.CREATEDATE
                                                                       AND PA.CREATEDATE < DATEADD(DAY, 1, A.CREATEDATE)
WHERE 
    A.CREATEDATE > '2017-01-01'
    AND A.CREATEDATE < DATEADD(DAY, 1, '2018-09-20')

The inner join to be added has one new table V_DbPatientAdmissionAddition the other table is already in the query v_dbPatientAdmissions.

I've tried adding it as a subquery and also tried adding it without the From v_dbPatientAdmissions but still there is something wrong with the syntax.

If someone could help in how I can add the inner join to the query that would be helpful! I hope I was able to explain the issue clearly.

Upvotes: 0

Views: 79

Answers (2)

Peter B
Peter B

Reputation: 24136

You can extend the 2nd subquery. You'll need to also extend the main SELECT with the new columns that you want to be returned.

SELECT PA.RegCode UHID, PA.Specialisation, A.CREATEDATE ADM_ORDER, PA.CREATEDATE ADM_DATE,  
(CAST((DATEDIFF(minute, A.CREATEDATE, PA.CREATEDATE))/60 AS VARCHAR)+' H:'                                 
+ CAST((DATEDIFF(minute,A.CREATEDATE, PA.CREATEDATE))%60 AS VARCHAR)+' M') AS DURATION
FROM (SELECT M.IPID, M.PatientID, A.CREATEDATE 
      FROM v_dbPatientAdvice A
      INNER JOIN v_dbPatientMonitoring M ON M.MonitorID = A.MonitorID
      WHERE A.FollowUpType = 2
) A 
INNER JOIN (SELECT PA.PatientID, PA.CREATEDATE, PA.RegCode, S.Specialisation, PA.PatientType,
                   PA.AdmissionID, pad.AdmissionID, pad.AdmTypeID -- New SELECT columns
            FROM v_dbPatientAdmissions PA
            INNER JOIN v_dbSpecializations S ON S.SpecialiseID = PA.SpecialiseID
            INNER JOIN V_DbPatientAdmissionAddition pad on pad.AdmissionID=pa.AdmissionID -- New JOIN
            WHERE pad.AdmTypeID in (3,37,42,43,44,51) -- new WHERE
) PA ON A.PatientID = PA.PatientID
    AND PA.PatientType = 2
    AND PA.CREATEDATE > A.CREATEDATE
    AND PA.CREATEDATE < DATEADD(DAY, 1, A.CREATEDATE)
WHERE A.CREATEDATE > '2017-01-01'
AND   A.CREATEDATE < DATEADD(DAY, 1, '2018-09-20')

Upvotes: 1

Gordon Linoff
Gordon Linoff

Reputation: 1269443

You can use a CTE to simplify this work:

with cte as (
      select pa.AdmissionID, pad.AdmissionID,pad.AdmTypeID
      from v_dbPatientAdmissions pa inner join
           V_DbPatientAdmissionAddition pad on pad.AdmissionID=pa.AdmissionID
      where pad.AdmTypeID in (3, 37, 42, 43, 44, 51)
    )
select . . .
from . . . join
     newtable nt
     on ?.? = nt.?  -- whatever the `join` conditions are
. . .

Upvotes: 1

Related Questions