Внутреннее соединение между 2 sql с ROW_Number SQL Server - PullRequest
0 голосов
/ 08 октября 2018

Я просмотрел отдельные посты, но все еще не смог решить проблему, возникшую у меня с внутренним объединением двух операторов SQL с вызовом функции Row_number.

Попытка получить данные из двух таблиц.Я использую Row_Number, чтобы получить различные политики, так как есть много повторяющихся значений.Я не могу понять, что не так в части «Внутреннее соединение».

Select * 
from 
    (Select Distinct
         PolicyReference as IRIS_Policy_Ref ,
         REPLACE(SUBSTRING(Ch.ClaimSuffix,3,4),'-','') as Claims_Seq,
         CH.AccidentDate as Loss_Date,
         CH.AccidentYear as Loss_Year,
         CH.ClaimCreatedDate as Claim_Advised_Date,
         CH.NoticeDescription as Loss_Description,
         NULL as Conv_Claim_No,
         NULL as CHI,     
         NULL as Manual, 
         BrokerRef as Broker_Code,                
         Null as Current_ACR,
         Null as Current_IBNR,
         Source ='DCT',
         ROW_NUMBER() OVER(PARTITION BY PolicyReference ORDER BY TransactionDate DESC) RowNum 
     from 
         dbo.Policy) PM 
INNER JOIN 
    dbo.Claims CH ON Ch.PolicyReference = PM.PolicyReference
where 
    PM.RowNum = 1 

Пример сообщения об ошибке -

Сообщение 4104, Уровень 16, Состояние 1, Строка 3
Не удалось связать идентификатор из нескольких частей "Ch.ClaimSuffix".

Сообщение 4104, уровень 16, состояние 1, строка 3
Не удалось связать идентификатор из нескольких частей "Ch.AccidentDate".

Сообщение 4104, уровень 16, состояние 1, строка 5
Не удалось связать многоэлементный идентификатор "CH.AccidentYear".

Что я делаю неправильно?Он не распознает столбцы таблицы утверждений.

Будем благодарны за любые предложения.Я застрял в этом с утра.

Спасибо !!

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Многие люди любят использовать CTE:

with table_with_rowsnums as (
Select * from (Select Distinct
PolicyReference as IRIS_Policy_Ref ,
REPLACE(SUBSTRING(Ch.ClaimSuffix,3,4),'-','') as Claims_Seq,
CH.AccidentDate as Loss_Date,
CH.AccidentYear as Loss_Year,
CH.ClaimCreatedDate as Claim_Advised_Date,
CH.NoticeDescription as Loss_Description,
NULL  as Conv_Claim_No,
NULL as CHI,     
NULL as Manual, 
BrokerRef as Broker_Code,                
Null as Current_ACR,
Null as Current_IBNR,
Source ='DCT',
ROW_NUMBER() OVER(PARTITION BY PolicyReference ORDER BY TransactionDate 
DESC) RowNum 
from dbo.Policy ) PM 
INNER JOIN dbo.Claims CH ON Ch.PolicyReference = PM.PolicyReference)
select * from  table_with_rowsnums where rownum=1
0 голосов
/ 09 октября 2018

Нет необходимости использовать select distinct с row_number().Кроме того, CH не имеет ссылки.Вам нужно сделать JOIN в подзапросе:

select * 
from (Select pm.PolicyReference as IRIS_Policy_Ref ,
             REPLACE(SUBSTRING(Ch.ClaimSuffix, 3, 4), '-', '') as Claims_Seq,
             CH.AccidentDate as Loss_Date,
             CH.AccidentYear as Loss_Year,
             CH.ClaimCreatedDate as Claim_Advised_Date,
             CH.NoticeDescription as Loss_Description,
             NULL as Conv_Claim_No,
             NULL as CHI,     
             NULL as Manual, 
             BrokerRef as Broker_Code,                
             Null as Current_ACR,
             Null as Current_IBNR,
             Source ='DCT',
             ROW_NUMBER() OVER (PARTITION BY pm.PolicyReference ORDER BY pm.TransactionDate DESC) RowNum 
         from dbo.Policy p JOIN
              dbo.Claims CH
              ON Ch.PolicyReference = PM.PolicyReference
        ) PM 
where PM.RowNum = 1 ;
0 голосов
/ 08 октября 2018

Вы не можете ссылаться на Утверждения в своем подзапросе, потому что он не был представлен.Почему бы не переместить это объединение в основной запрос, как этот?

Select * 
from 
(
    Select 
        PolicyReference as IRIS_Policy_Ref ,
        REPLACE(SUBSTRING(Ch.ClaimSuffix,3,4),'-','') as Claims_Seq,
        CH.AccidentDate as Loss_Date,
        CH.AccidentYear as Loss_Year,
        CH.ClaimCreatedDate as Claim_Advised_Date,
        CH.NoticeDescription as Loss_Description,
        NULL  as Conv_Claim_No,
        NULL as CHI,     
        NULL as Manual, 
        BrokerRef as Broker_Code,                
        Null as Current_ACR,
        Null as Current_IBNR,
        Source ='DCT',
        ROW_NUMBER() OVER(PARTITION BY PolicyReference ORDER BY TransactionDate DESC) RowNum 
    from dbo.Policy P
    INNER JOIN dbo.Claims CH ON Ch.PolicyReference = P.PolicyReference
) PM 
where PM.RowNum = 1 
...