Присоединиться с помощью подзапроса Присоединение Specifi c ID - PullRequest
0 голосов
/ 21 января 2020

То, чего я пытаюсь добиться, - это привести 1 верхний CLM000ID каждого экземпляра, где CLMSTSID равен 3. Я предполагаю, что с помощью приведенного ниже он присоединится к верхнему 1 независимо от CLM00ID. Как мне этого добиться?

Таблица примерно такая

CLM000ID    |     CLMSTSID
1                  2
1                  3
2                  3



LEFT JOIN UC00LCNTRY0 cntry ON drs.CNTRY0ID=cntry.CNTRY0ID
LEFT JOIN (SELECT TOP 1 CLM000ID,LSTPDTS 
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3
            ORDER BY LSTPDTS DESC) dtclsd ON dtclsd.CLM000ID=c.CLM000ID
LEFT JOIN UC10DSR0000 clmf ON clmf.SR0000ID=c.CLMSFCRID

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Если вы пытаетесь сделать это в подзапросе, то вы хотите OUTER APPLY:

LEFT JOIN
UC00LCNTRY0 cntry
ON drs.CNTRY0ID = cntry.CNTRY0ID OUTER APPLY
(SELECT TOP 1 CLM000ID,LSTPDTS 
 FROM UC07DCLSTTR dc
 WHERE dc.CLM000ID = c.CLM000ID AND
       dc.CLMSTSID = 3
 ORDER BY LSTPDTS DESC
) dtclsd 
0 голосов
/ 21 января 2020

Мне кажется, я нашел способ выполнить sh, но с использованием ROW_NUMBER() OVER

SELECT CLM000ID, CLMSTSID, LSTPDTS, ROW_NUMBER() OVER (partition by CLM000ID ORDER BY LSTPDTS DESC)
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3 
            and CLM000ID in (18)--(2,5,6,10,12,13,15,16,17,20,21,22,24,25,26,27,29,18)          
            ORDER BY LSTPDTS DESC
0 голосов
/ 21 января 2020

используйте max() функцию агрегирования вместо получения top записи.

LEFT JOIN UC00LCNTRY0 cntry ON drs.CNTRY0ID=cntry.CNTRY0ID
LEFT JOIN (SELECT MAX(CLM000ID) CLM000ID, LSTPDTS 
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3 AND CLM000ID=c.CLM000ID
            GROUP BY LSTPDTS) dtclsd ON dtclsd.CLM000ID = c.CLM000ID
LEFT JOIN UC10DSR0000 clmf ON clmf.SR0000ID=c.CLMSFCRID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...