2017-01-23 54 views
0

我的数据是这样的条件下加入表:如何使用基于列的值

enter image description here

正如你可以看到我有$ 41重复Premium。 如果我在JOIN条件说:

` LEFT OUTER JOIN Catalytic_vw_AggregateScheduleUniqueGUID agg ON agg.QuoteGuid = dbo.tblQuotes.QuoteGUID AND agg.guid = CL.CompanylocationGUID 
      AND agg.policyNumber IS NOT NULL 

然后我会看不到PolicyNumberFromRaterNULL值。 但我不想只看到特定的LineGUID NULL,而不是所有的人。

基本上我想说:只为LineGUID = CF144437... 使用条件AND agg.policyNumber IS NOT NULL但如果要去其他LineGUID话,我想看看NULL在`PolicyNumberFromRater。

当我将表连接在一起时,我该怎么做?

含有LineGUID的表格是tbl.Quotes,它也可以在JOIN中找到。

这里是我的完整JOIN

select PolicyNumber 
    FROM  tblFin_Invoices INV 
        INNER JOIN dbo.tblQuotes ON INV.QuoteID = tblQuotes.QuoteID 
        INNER JOIN tblFin_InvoiceDetails INVD ON INV.InvoiceNum = INVD.InvoiceNum 
        INNER JOIN dbo.tblQuoteDetails ON dbo.tblQuotes.QuoteGUID = dbo.tblQuoteDetails.QuoteGuid AND tblQuoteDetails.CompanyLineGuid = CF144437-F128-4B77-AC19-877247347D02 
INVD.CompanyLineGuid  
        LEFT OUTER JOIN dbo.tblCompanyLines ON dbo.tblQuoteDetails.CompanyLineGuid = dbo.tblCompanyLines.CompanyLineGUID 
        LEFT OUTER JOIN dbo.tblCompanyLocations AS CL ON dbo.tblCompanyLines.CompanyLocationGUID = CL.CompanyLocationGUID 
       LEFT OUTER JOIN tblCompanyLocations ON tblQuotes.CompanyLocationGuid = tblCompanyLocations.CompanyLocationGUID 
    ---------/*This is where I need the condition*/ 
       LEFT OUTER JOIN Catalytic_vw_AggregateScheduleUniqueGUID agg ON agg.QuoteGuid = dbo.tblQuotes.QuoteGUID AND agg.guid = CL.CompanylocationGUID 
       AND agg.policyNumber IS NOT NULL 
    --(use "AND agg.policyNumber IS NOT NULL" only for LineGUID = CF144437...)  
        LEFT OUTER JOIN   tblSubmissionGroup ON tblQuotes.SubmissionGroupGuid = tblSubmissionGroup.SubmissionGroupGUID 
        LEFT OUTER JOIN   tblUsers ON INV.UnderwriterUserGUID = tblUsers.UserGUID 
        LEFT OUTER JOIN   tblClientOffices ON tblQuotes.QuotingLocationGuid = tblClientOffices.OfficeGUID 
     LEFT OUTER JOIN tblInsureds ON tblSubmissionGroup.InsuredGuid = tblInsureds.InsuredGuid 
     LEFT OUTER JOIN lstPolicyTypes ON tblQuotes.PolicyTypeID = lstPolicyTypes.PolicyTypeID 

回答

1

你可以尝试这样的,当LineGUID是其他值和Ag g.policyNumber isnull,条件将为''!='*'(True)

LEFT OUTER JOIN Catalytic_vw_AggregateScheduleUniqueGUID agg ON agg.QuoteGuid = dbo.tblQuotes.QuoteGUID AND agg.guid = CL.CompanylocationGUID 
      AND ISNULL(agg.policyNumber,'')!=CASE WHEN LineGUID = 'CF144437...' THEN '' ELSE '*' END 
+0

谢谢。好想法。 – Oleg

2

如果您只想处理其中一个或多个记录可能有NULL你所描述的,即处理所有列,除了PolicyNumberFromRater,重复记录的情况下,则我想你可以聚合这些NULL值远用GROUP BY

SELECT MAX(PolicyNumberFromRater) AS PolicyNumberFromRater, 
     LineGUID, 
     Premium, 
     Carrier, 
     -- other columns 
FROM tblFin_Invoices INV 
INNER JOIN dbo.tblQuotes 
    ON INV.QuoteID = tblQuotes.QuoteID 
-- other joins 
GROUP BY LineGUID, 
     Premium, 
     Carrier, 
     -- all other columns in SELECT except for PolicyNumberFromRater 
+0

谢谢。有用。 – Oleg