Sql 如何将内部联接添加到具有多个联接的查询中?
我试图添加一个由其他人完成的内部连接到查询中,但我不断地得到错误;我想找出正确的方法来添加它, 要添加的内部联接是:Sql 如何将内部联接添加到具有多个联接的查询中?,sql,sql-server,Sql,Sql Server,我试图添加一个由其他人完成的内部连接到查询中,但我不断地得到错误;我想找出正确的方法来添加它, 要添加的内部联接是: select pa.AdmissionID, pad.AdmissionID, pad.AdmTypeID from v_dbPatientAdmissions pa inner join V_DbPatientAdmissionAddition pad on pad.AdmissionID = pa.AdmissionID where p
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
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')
要添加的内部联接有一个新表V_dbPatientAdmissions。另外一个表已在查询V_dbPatientAdmissions中
我尝试过将其作为子查询添加,也尝试过在不使用From v_dbPatientAdmissions的情况下添加它,但语法仍然有问题
如果有人能帮助我如何将内部联接添加到查询中,那将非常有用!我希望我能够清楚地解释这个问题 您可以使用CTE简化这项工作:
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
. . .
您可以使用CTE简化此工作:
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
. . .
您可以扩展第二个子查询。您还需要使用要返回的新列扩展主SELECT
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')
您可以扩展第二个子查询。您还需要使用要返回的新列扩展主SELECT
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')
. . 请用适当的数据库标记您的问题。基于语法,我添加了sql server标记。为了可读性,我建议使用CTE,而不是与FROM子句一致的完整SELECT语法。然后你的新内部连接将在CTE上连接。请用适当的数据库标记您的问题。基于语法,我添加了sql server标记。为了可读性,我建议使用CTE,而不是与FROM子句一致的完整SELECT语法。然后你的新内部连接将在CTE上连接。