需要附加SQL表,但不像JOINS

时间:2017-01-05 21:30:29

标签: sql sql-server-2008

我的情况如下。 我有两个表,两个表之间有一个Common列/ Key。 我需要Table2数据只是附加到Table1而不像JOIN那样重复。 如果一个表中有更多行,则其他表行可以为NULL。 如图所示,当Table2没有相应的行数时,Result Table有NULL。

Two Tables Need to be appended

我尝试使用Joins,但我得到了45行的结果。但我应该得到9行。

提前致谢。

编辑:添加了我的查询

SELECT DISTINCT
 APPT.PRSN_ID
,APPT.SCHEDULEDAPPOINTMENTS 
,APPT.OVERDUEAPPOINTMENTS           
,Visit.ENCOUNTER_CATEGORY 
,Visit.ENCOUNTER_TYPE 
,Visit.ENCOUNTER_DATE 
,Visit.ENCOUNTER_FOLLOWUP_DATE 
FROM 
APPOINTMENTS APPT   
OUTER APPLY dbo.fn_GetVisitsOfAPerson(PROV.PRSN_ID) AS Visit

/***********************************************************/
--IN THE ABOVE QUERY, THE FUNCTION IS DEFINED AS BELOW

CREATE FUNCTION dbo.fn_GetVisitsOfAPerson(@PrsnID AS bigint)  
RETURNS TABLE 
AS 
RETURN 
   ( 
        SELECT                      
            VISITS.PVISITS_PRSN_KEY 
            ,DATA.HE_Category_Description  AS 'ENCOUNTER_CATEGORY'
            ,DATA.HE_Type_Description AS 'ENCOUNTER_TYPE'
            ,VISITS.PVISITS_DATE  AS 'ENCOUNTER_DATE'
            ,VISITS.PVISITS_FOLLOWUP_DATE  AS 'ENCOUNTER_FOLLOWUP_DATE'                                         
        FROM
            [HS_PRSN_HEALTH_VISITS] VISITS INNER JOIN 
            [HS_HealthEncounter_Table] DATA ON 
            ENCOUNTER.PVISITS_CATEGORY = DATA.HE_Category_Code AND 
            ENCOUNTER.PVISITS_TYPE = DATA.HE_Type_Code 
        WHERE   
            PVISITS_PRSN_KEY = @PrsnID          
            AND PVISITS_VOID = 0 
    ) 
GO 

2 个答案:

答案 0 :(得分:0)

我无法读取您的数据表,但我认为您只需要引入行号。

这将是这样的:

select . . .
from (select t1.*, row_number() over (partition by key order by ??) as seqnum
      from table1 t1
     ) full join
     (select t2.*, row_number() over (partition by key order by ??) as seqnum
      from table1 t2
     ) t2
     on t1.key = t2.key and t1.seqnum = t2.seqnum;

答案 1 :(得分:0)

基于你想要访问表中存在的9行,你看起来需要一个OUTER JOIN,如:

SELECT DISTINCT
 APPT.PRSN_ID
,APPT.SCHEDULEDAPPOINTMENTS 
,APPT.OVERDUEAPPOINTMENTS           
,Visit.ENCOUNTER_CATEGORY 
,Visit.ENCOUNTER_TYPE 
,Visit.ENCOUNTER_DATE 
,Visit.ENCOUNTER_FOLLOWUP_DATE 
FROM Visit
LEFT OUTER JOIN
APPOINTMENTS APPT   
    ON Visit.key = APP.key