Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将内部联接添加到具有多个联接的查询中?_Sql_Sql Server - Fatal编程技术网

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上连接。