[英]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.