簡體   English   中英

具有ROW_Number SQL Server的2個SQL之間的內部聯接

[英]Inner Join between 2 sql having ROW_Number SQL Server

我已經Row_number特定的帖子,但是仍然無法解決我對兩個SQL語句的內部聯接的內部連接,其中兩個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”。

我究竟做錯了什么? 它無法識別索賠表列。

任何線索將不勝感激。 從早上開始,我就被困在這個地方。

謝謝 !!

您不能像這樣在子查詢中引用Claims,因為它尚未引入。 為什么不這樣將聯接移到主查詢?

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 

許多人喜歡使用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

無需在row_number()使用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 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM