Each PolicyNumber
can have multiple ClassCode
. So the goal is to eliminate the whole PolicyNumber
with all related columns
including all ClassCode's
if at least one ClassCode
chosen to be eliminated.
I have cte1
with PolicyNumber
and WrittenPremium
(WP) and I have table tblClassCodesPlazaCommercial
with PolicyNumber
and ClassCode
.
In my WHERE
clause im choosing:
WHERE EXISTS (
SELECT DISTINCT PolicyNumber
FROM tblClassCodesPlazaCommercial
WHERE PolicyNumber NOT IN (SELECT PolicyNumber FROM tblClassCodesPlazaCommercial WHERE ClassCode =5151)
)
Then if I select * from cte3 WHERE ClassCode =5151
I still have Policies with ClassCode 5151
The entire select statement below:
select
cte1.PolicyNumber,
cte1.TransactionEffectiveDate,
cc.ClassCode,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY cte1.QuoteID, cte1.PolicyNumber, cc.TransactionEffectiveDate ORDER BY (SELECT 0))=1 THEN cte1.WP
ELSE 0
END as WP--,
from cte1 inner join tblClassCodesPlazaCommercial cc on cte1.PolicyNumber=cc.PolicyNumber AND cte1.QuoteID=cc.QuoteID AND cte1.TransactionEffectiveDate=cc.TransactionEffectiveDate
where EXISTS (SELECT DISTINCT PolicyNumber FROM tblClassCodesPlazaCommercial WHERE PolicyNumber NOT IN (SELECT PolicyNumber FROM tblClassCodesPlazaCommercial WHERE ClassCode =5151))
But then, if I declare @PoliciesThatDontHaveClassCodes Table with PolicyNumber's that dont have ClassCode 5151 and use it in my EXISTS command - then it works.
DECLARE @PoliciesThatDontHaveClassCodes Table (PolicyNumber varchar(100))
INSERT INTO @PoliciesThatDontHaveClassCodes SELECT DISTINCT PolicyNumber FROM tblClassCodesPlazaCommercial
WHERE PolicyNumber NOT IN (SELECT PolicyNumber FROM tblClassCodesPlazaCommercial WHERE ClassCode =5151)
select
cte1.PolicyNumber,
cte1.TransactionEffectiveDate,
cc.ClassCode,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY cte1.QuoteID, cte1.PolicyNumber, cc.TransactionEffectiveDate ORDER BY (SELECT 0))=1 THEN cte1.WP
ELSE 0
END as WP--,
from cte1 inner join tblClassCodesPlazaCommercial cc on cte1.PolicyNumber=cc.PolicyNumber
AND cte1.QuoteID=cc.QuoteID
AND cte1.TransactionEffectiveDate=cc.TransactionEffectiveDate
where EXISTS (SELECT * FROM @PoliciesThatDontHaveClassCodes t WHERE t.PolicyNumber=cc.PolicyNumber )
What is the difference? the both sub-queries itself returns exactly the same result set. Why in first case it doesn't work, but in second (when I declared @PoliciesThatDontHaveClassCodes) - it works? How can I achieve same result without declaring any table variables?