Reputation: 79
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
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
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