Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 Server 2008 R2连接两个表_Sql_Sql Server 2008_Join_Sql Server 2008 R2 - Fatal编程技术网

使用两列SQL Server 2008 R2连接两个表

使用两列SQL Server 2008 R2连接两个表,sql,sql-server-2008,join,sql-server-2008-r2,Sql,Sql Server 2008,Join,Sql Server 2008 R2,我有两张桌子要合在一起。一个是包含各种信息位的表,一个是维度视图,一个分类定义表。包含所需信息的表如下所示 VISIT ID | ATN_DR_NO | ADM_DR_NO |... 12345678 | 987654 | 123456 |... 其中,ATN_DR_NO是主治医生id号,ADM_DR_NO是入院医生id号。我有第二个表,其中包含医生id号及其相应的名称,如下所示 src_prct_no | pract_rpt_name | ... 987654 | Dr

我有两张桌子要合在一起。一个是包含各种信息位的表,一个是维度视图,一个分类定义表。包含所需信息的表如下所示

VISIT ID | ATN_DR_NO | ADM_DR_NO |...
12345678 | 987654    | 123456    |...
其中,ATN_DR_NO是主治医生id号,ADM_DR_NO是入院医生id号。我有第二个表,其中包含医生id号及其相应的名称,如下所示

src_prct_no | pract_rpt_name | ...
987654      | Dr. A          | ...
123456      | Dr. B          | ...
...
我试图完成的是在一个表中获得一个结果,在这个表中我有以下内容

VISIT ID | ATN_DR_NO | ATN DR NAME | ADM_DR_NO | ADM DR NAME
12345678 | 987654    | DR. A       | 123456    | DR. B
我不知道如何连接多个列

以下是我正在处理的全部查询:

SET ANSI_NULLS OFF
GO
-- VARIABLE DECLARATION AND INITIALIZATION
DECLARE @SD DATETIME;
DECLARE @ED DATETIME;
SET @SD = '2014-01-01';
SET @ED = '2014-02-01';

/*
-----------------------------------------------------------------------
THIS QUERY WILL GET ALL THE FRONT END INFORMATION REQUIRED FOR HOSIM
AND INSERT IT INTO A TABLE THAT WILL GET MATCHED UP WITH THE DISCHARGE
ORDERS TABLE
-----------------------------------------------------------------------
START OF QUERY 1
-----------------------------------------------------------------------
*/
-- TABLE DECLARATION
DECLARE @T1 TABLE (
    [ENCOUNTER ID]               VARCHAR(200)
    , /*NEW*/MRN                 VARCHAR(20)    
    , /*NEW*/DOB                 DATETIME
    , /*NEW*/GENDER              VARCHAR(10)
    , FINANCIALCLASSORIG         VARCHAR(200)
    , [ADMIT DATE]               DATE
    , [ADMIT TIME]               TIME
    , [ADMIT FROM]               VARCHAR(200)
    , [DISCHARGE DATE]           DATE
    , [DISCHARGE TIME]           TIME
    , /*TEST*/[ADMITTING MD NO]  VARCHAR(200)
    , /*TEST*/[ADMITTING MD]     VARCHAR(200)
    , /*TEST*/[ATTENDING MD NO]  VARCHAR(200)
    , /*TEST*/[ADTTENDING MD]    VARCHAR(200)
    , [MS DRG]                   VARCHAR(200)
    , LOS                        VARCHAR(20)
    , [ADMIT PATIENT STATUS]     VARCHAR (10)
    , [DISCHARGE PATIENT STATUS] VARCHAR(10)
    , [DISCHARGE DISPOSITION]    VARCHAR (200)
    , [DISCHARGE UNIT]           VARCHAR (200)
)
-- WHAT GETS INSERTED INTO @T1
INSERT INTO @T1
SELECT
A.[VISIT ID]
, A.MRN
, A.DOB
, A.GENDER
, A.FINANCIALCLASSORIG
, A.[ADMIT DATE]
, A.[ADMIT TIME]
, A.[ADMIT FROM]
, A.[DISCHARGE DATE]
, A.[DISCHARGE TIME]
, A.[ADMITTING DR NO]
, A.[ADMITTING DR]
, A.[ATTENDING DR NO]
, A.[ATTENDING DR]
, A.[MS DRG]
, A.LOS
, A.[ADMIT PATIENT STATUS]
, A.[DISCHARGE PATIENT STATUS]
, A.[DISCHARGE DISPOSITION]
, A.[DISCHARGE UNIT]
-- END @T1 INSERT SELECTION

-- WHERE IT ALL COMES FROM
-- COLUMN SELECTION
FROM (
    SELECT DISTINCT PAV.PtNo_Num        AS [VISIT ID]
    , /*NEW*/PAV.Med_Rec_No             AS MRN
    , /*NEW*/PAV.Pt_Birthdate           AS DOB
    , /*NEW*/PAV.Pt_Sex                 AS GENDER
    , PD.pyr_name                       AS [FinancialClassOrig]
    , CAST(PAV.Adm_Date AS DATE)        AS [ADMIT DATE]
    , CAST(PAV.vst_start_dtime AS TIME) AS [ADMIT TIME]
    , PAV.Adm_Source                    AS [ADMIT FROM]
    , CAST(PAV.Dsch_Date AS DATE)       AS [DISCHARGE DATE]
    , CAST(PAV.Dsch_DTime AS TIME)      AS [DISCHARGE TIME]
    , /*TEST*/PAV.Adm_Dr_No             AS [ADMITTING DR NO]
    , /*TEST*/PDV.pract_rpt_name        AS [ADMITTING DR]
    , /*TEST*/PAV.Atn_Dr_No             AS [ATTENDING DR NO]
    , /*TEST*/PDV.pract_rpt_name        AS [ATTENDING DR]
    , PAV.drg_no                        AS [MS DRG]
    , PAV.Days_Stay                     AS [LOS]
    , 'I'                               AS [ADMIT PATIENT STATUS]
    , 'I'                               AS [DISCHARGE PATIENT STATUS]
    , DDM.dsch_disp_desc                AS [DISCHARGE DISPOSITION]
    , VR.ward_cd                        AS [DISCHARGE UNIT]

    -- FROM DB(S)
    FROM smsdss.BMH_PLM_PtAcct_V PAV
         JOIN smsdss.pract_dim_v PDV
         ON PAV.Adm_Dr_No = PDV.src_pract_no
         /*TEST*/AND PAV.Atn_Dr_No = PDV.src_pract_no
         JOIN smsdss.pyr_dim PD
         ON PAV.Pyr1_Co_Plan_Cd = PD.pyr_cd
         JOIN smsmir.vst_rpt VR
         ON PAV.PtNo_Num = VR.acct_no
         JOIN smsdss.dsch_disp_mstr DDM
         ON VR.dsch_disp = DDM.dsch_disp

    -- FILTER(S)
    WHERE PAV.Dsch_Date >= @SD 
    AND PAV.Dsch_Date < @ED
    AND PAV.Plm_Pt_Acct_Type = 'I'
    AND PAV.PtNo_Num < '20000000'
    AND PDV.src_spclty_cd = 'HOSIM'
    AND PD.orgz_cd = 'S0X0'
    AND PD.pyr_name != '?'
) A

SELECT * FROM @T1
你认为我应该创建像@ADM_DR和@ATN_DR这样的变量,并在WHERE子句中将它们设置为一个select语句来获取它们吗?
谢谢,

您再次加入到表中,因此看起来好像您从同一个表中复制了两次—一次用于主治医生查找,一次用于住院医生查找

SELECT a.doc_name as attending_name, 
       b.somefield, 
       a2.doc_name as admitting_name

FROM doctors a, 
     someothertable b, 
     doctors a2

WHERE a.doc_id = b.attending_doc_id
  AND a2.doc_id = b.admitting_doc_id
  AND b.record_id = <whatever>
a的内部连接以第一个医生为目标,a2的连接以第二个医生为目标


请原谅伪代码,但我想你明白了。您会注意到a和a2都从医生表中获取doc_name字段,但它们被连接到b表的不同ID。

谢谢Jason,我本来打算这样做的,我想用一种更复杂的方式,并创建一个变量,我很高兴我没有这样做。我对伪代码进行了更多修改,以便更易于阅读。很高兴我能帮忙。