【发布时间】:2017-12-07 16:42:56
【问题描述】:
大家好,我正在处理这份报告。它有多个列,在这些列之间是一些左连接。所以我的问题是,如何在查询中添加左连接?
Declare @asofdate smalldatetime
Set @asofdate = '2017-08-24'
SELECT
OCCONR as [Company Number],
OCCMNR as [Claim Number], --CMOCUR db)
OCEXCD as [Claim Counsel], ---(CMOCUR db)
DATEFROMPARTS(OCEFCN*100+OCEFYY,OCEFMM,OCEFDD) as [Policy Effective Date], -- (CMOCUR db)
iif([True CAT Nbr] is null, OCCTCD, [True CAT Nbr]) as [CAT Code], ---(Check Comment 1)
iif(LSCMNT is null,'', LSCMNT) as [NOA Comments], --- (Check Comemnt 2)
concat([First_Name],' ',[Last_Name]) as [Insured Name], --- (Check Comment 3)
DatefromParts([OCLSCN]*100+[OCLSYY],[OCLSMM],[OCLSDD]) as [Occurrence Date], --- (CMOCUR db)
rtrim(ltrim(OCDACC)) as [Cause of Loss], --- (CMOCUR db)
DatefromParts([OCRPCN]*100+[OCRPYY],[OCRPMM],[OCRPDD]) as [Claim Reported Date], --- (CMOCUR db)
iif(LSSETLD is null,'', LSSETLD) as [Settled Indicator], --- (Check Comment 2)
--iif(SUM([Incurred Loss NET OF S&S]) - SUM([Paid Loss NET OF S&S]) = 0, 'Closed', 'Open') as [Status in AS-400]
iif(OCCLCN=0,'',datefromparts(OCCLCN*100+OCCLYY,OCCLMM,OCCLDD)) as [Closed Date], --- (CMOCUR db)
iif(LSCLCN=0 OR LSCLCN IS NULL,'',DatefromParts(LSCLCN*100+LSCLYY,LSCLMM,LSCLDD)) as [All Closed Date] ----(Comment 2)
--[Last Reserve Change Date]
FROM AS400.FRTDTA250.CMOCUR
LEFT JOIN Lookups.dbo.[Bad CAT Codes] ON [Claim Nbr] = OCCMNR ---- This LEFT JOIN provides the CAT CODE for this report (Comment 1)
LEFT JOIN AS400.FRTDTA250.CMLSCP ON LSCMNR = OCCMNR ---- This is used to pull any COMMENTS and SETTLEMENT made on a claim (Comment 2)
LEFT JOIN Lookups.dbo.Insured_Name_By_PolicyNum ON Prefix = OCPRFX and Polnum = OCPLNR --- This is to add the INSURED NAME (comment 3)
所以,我遇到的问题是我有其他子查询,旨在为 [AS-400 中的状态] 和 [最后保留更改日期] 提供信息。如何将此查询连接到 SQL?
以下是我尝试添加到选择查询的 2 个查询:
-- 查询 [AS-400 中的状态]
SELECT
---s1.[Claim Number],
iif(SUM(s1.[Incurred Loss NET OF S&S]) - SUM(s1.[Paid Loss NET OF S&S]) = 0, 'Closed', 'Open') as [Open / Closed]
---SUM(s1.[Incurred Loss NET OF S&S]) - SUM(s1.[Paid Loss NET OF S&S]) as [Loss C/R]
FROM
(
SELECT
OCCMNR as [Claim Number],
SUM(iif(DATASETTYPE IN ('Incurred LOSS'), CTTRAM, iif(DATASETTYPE IN ('SALVAGE','SUBROGATION','OTHER RECOVERIES'), -CTTRAM, 0))) AS [Incurred Loss NET OF S&S],
SUM(iif(DATASETTYPE IN ('Paid LOSS'), CTTRAM, iif(DATASETTYPE IN ('SALVAGE','SUBROGATION','OTHER RECOVERIES'), -CTTRAM, 0))) AS [Paid Loss NET OF S&S]
FROM AS400.FRTDTA250.[CMOCUR] AS A
INNER JOIN AS400.FRTDTA250.[CMTRAN]AS B ON A.OCCMNR = B.CTCMNR
LEFT JOIN Lookups.dbo.TransactionCodes AS C ON B.CTGRPC = C.TransactionCode
WHERE DATEFROMPARTS(CTTRCN*100+CTTRYY, CTTRMM, CTTRDD) <= @asofdate
and CTTRSB not in (4,12)
and CTTSCD = 'P'
GROUP BY OCCMNR
) as s1
GROUP BY s1.[Claim Number]
ORDER BY s1.[Claim Number]
--查询[最后保留更改日期]
Select [Claim Number],
left(convert(CHAR, Max([Loss Transaction Date]), 120),10) as [Last Reserve Change Date]
From
(
Select [OCCMNR] as [Claim Number],
DATEFROMPARTS(CTTRCN*100+CTTRYY, CTTRMM, CTTRDD) as [Loss Transaction Date],
iif(DATASETTYPE IN ('Incurred LOSS'), CTTRAM, 0) as [Incurred Loss]
From AS400.FRTDTA250.[CMTRAN] as b1
LEFT JOIN AS400.FRTDTA250.[CMOCUR] as a1
ON a1.OCCMNR = b1.CTCMNR
LEFT JOIN Lookups.dbo.TransactionCodes as c1
ON b1.CTGRPC = c1.TransactionCode
Where (iif(DATASETTYPE IN ('Incurred LOSS'), CTTRAM, 0) <> 0)
and DATEFROMPARTS(CTTRCN*100+CTTRYY, CTTRMM, CTTRDD) <= @asofdate
and CTTRSB not in (4,12)
AND CTTSCD = 'P'
) s2
group by [Claim Number]
) as G
on G.[Claim Number] = a.[OCCMNR]
我使用的是 MS-SQL 服务器
【问题讨论】:
-
select * from (subquery1) a left join (subquery2)b on a.key = b.key。您已经很接近了,并且您有在第二个查询中从子查询中进行选择的想法。最后的飞跃,任何查询都可以用括号括起来成为子查询,将子查询视为常规表并从那里加入
标签: sql sql-server tsql join