2014-09-02 4 views
0

У меня есть данные в двух таблицах, как показано ниже:SQL присоединяется Пожалуйста, помогите мне ниже

enter image description here

Мне нужен выход третьей таблицы. Я использовал соединения, но он не работает. Я также использовал ранг.

SELECT 
    a.requestinstancelogid AS requestinstancelogidIn, 
    a.requestinstanceid AS InRequestInstance, 
    a.requeststatuscdid AS Inrequeststatuscdid, 
    a.Addnldocsin, 
    b.requestinstancelogid AS requestinstancelogidOut, 
    b.requestinstanceid AS OutRequestInstance, 
    b.requeststatuscdid AS Outrequeststatuscdid, 
    b.AddnldocsOut, 
    RANK() OVER (PARTITION BY a.requestinstanceid ORDER BY a.requestinstancelogid) AS one, 
    RANK() OVER (PARTITION BY b.requestinstanceid ORDER BY b.requestinstancelogid) AS two 
INTO 
    #tmp_MultipleAddnlDocsLender 
FROM 
    #tmp_addnldocsin a 
LEFT JOIN 
    #tmp_addnldocsout b ON a.requestinstanceid = b.requestinstanceid 
WHERE 
    a.requestinstanceid = 164944 

Этот запрос возвращает 6 записей.

+2

Пожалуйста, отправьте код, который вы пробовали до сих пор, и почему он не работает. – wdosanjos

+2

И объясните, какова логика, которой следует следовать. В примере нет логики. –

+0

Просто нет соответствующих строк в ваших первых двух таблицах, чтобы они могли привести к третьему, если у вас пока нет определенной конкретной логики, неизвестной нам до сих пор. –

ответ

2

Единственный способ, которым я могу видеть, что вы могли бы произвести эти результаты, является следующее:

;WITH Table1CTE AS 
(
    SELECT *, 
      ROW_NUMBER()OVER(PARTITION BY requestinstanceidin ORDER BY requestinstancelogid) AS rn 
    FROM Table1 
), Table2CTE AS 
(
    SELECT *, 
      ROW_NUMBER()OVER(PARTITION BY requestinstanceidout ORDER BY requestinstancelogid) AS rn 
    FROM Table2 
) 
SELECT * 
FROM Table1CTE T1 
     LEFT JOIN Table2CTE T2 
      ON T1.requestinstanceidin = T2.requestinstanceidout 
       AND T1.rn= T2.rn 
+0

+1 Вероятно, да –

+0

Удивительная благодарность. – user3619447

1

enter image description here

Насколько я могу сказать, тот же столбец в обоих является requestinstanceidout (вряд ли мог прочитать его, пожалуйста, напишите текст или код в следующий раз)

Основываясь на идее вышеперечисленное Правильно, у вас могло бы быть что-то вроде этого:

SELECT 
* 
FROM 
table1 a 
LEFT JOIN table 2 b 
ON a.requestinstanceidin = b.requestinstanceidout 

Надеюсь, это вам поможет!

+0

Он даст 6 строк. – user3619447

+0

Но мне нужно только 3 записи, которые я показал в третьей таблице на снимке экрана. – user3619447

+0

@ user3619447 не могли бы вы разместить 6 строк, которые вы получаете (я думаю, что это то же самое, что и в вашем исходном запросе) в OP? Благодаря! –

0

Я думаю, что вам нужно крест/наружный применять как этот

SELECT  
    a.requestinstancelogid AS requestinstancelogidIn, 
    a.requestinstanceid AS InRequestInstance, 
    a.requeststatuscdid AS Inrequeststatuscdid, 
    a.Addnldocsin, 
    q.requestinstancelogid AS requestinstancelogidOut, 
    q.requestinstanceid AS OutRequestInstance, 
    q.requeststatuscdid AS Outrequeststatuscdid, 
    q.AddnldocsOut 
FROM #tmp_addnldocsin a 
OUTER APPLY (SELECT TOP 1 
    b.requestinstancelogid AS requestinstancelogidOut, 
    b.requestinstanceid AS OutRequestInstance, 
    b.requeststatuscdid AS Outrequeststatuscdid, 
    b.AddnldocsOut 
    FROM #tmp_addnldocsout b 
    WHERE a.requestinstanceidin = b.requestinstanceidout 
    ORDER BY AddnIdocsOut DESC) q 
WHERE 
    a.requestinstanceid = 164944 
0

Я считаю, что это что вы ищете:

declare @request_instance_log_id_in table (
[log]  [int] 
, [in]  [int] 
, [status] [int] 
, [created] [datetime] default current_timestamp); 
insert into @request_instance_log_id_in 
     ([log],[in],[status]) 
values  (424593,164944,110), 
     (424594,164944,110), 
     (424595,164944,110); 
declare @request_instance_log_id_out table (
[log]  [int] 
, [out]  [int] 
, [status] [int] 
, [created] [datetime] default current_timestamp); 
insert into @request_instance_log_id_out 
     ([log],[out],[status]) 
values  (424593,164944,112), 
     (424594,164944,112); 
select [request_instance_log_id_in].[log]  as [request_instance_log_id_in_log] 
    , [request_instance_log_id_in].[in]  as [request_instance_log_id_in_in] 
    , [request_instance_log_id_in].[status] as [request_instance_log_id_in_status] 
    , [request_instance_log_id_in].[created] as [request_instance_log_id_in_created] 
    , [request_instance_log_id_out].[log]  as [request_instance_log_id_out_log] 
    , [request_instance_log_id_out].[out]  as [request_instance_log_id_out_out] 
    , [request_instance_log_id_out].[status] as [request_instance_log_id_out_status] 
    , [request_instance_log_id_out].[created] as [request_instance_log_id_out_created] 
from @request_instance_log_id_in as [request_instance_log_id_in] 
    left join @request_instance_log_id_out as [request_instance_log_id_out] 
      on [request_instance_log_id_out].[log] = [request_instance_log_id_in].[log]; 

request_instance_log_id_in_log request_instance _log_id_in_in request_instance_log_id_in_status request_instance_log_id_in_created request_instance_log_id_out_log request_instance_log_id_out_out request_instance_log_id_out_status request_instance_log_id_out_created 424593 164944 110 2014-09-02 08: 55: 01.107 424593 164944 112 2014-09-02 08: 55: 01.107 424594 164944 110 2014-09-02 08: 55: 01,107 424594 164944 112 2014-09-02 08: 55: 01.107 424595 164944 110 2014-09-02 08: 55: 01.107 NULL NULL NULL NULL