2017-01-23 74 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