2017-01-23 5 views
0

Мои данные выглядит следующим образом:как присоединиться к таблице, используя условие на основе значения столбца

enter image description here

Как вы можете видеть, у меня есть дубликат Premium от $ 41. Если я скажу, в моем 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 

Тогда я не буду видеть NULL значения в PolicyNumberFromRater колонки. Но я не хочу видеть NULL только для определенного LineGUID, не для всех из них.

В основном я хочу сказать: использовать условие AND agg.policyNumber IS NOT NULL только для LineGUID = CF144437... Но если это собиралось быть другой 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 является другое значение и аг 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

Если вы хотите, чтобы справиться с ситуацией, которую вы описали, а именно обработка записи, где все столбцы являются дубликатом для PolicyNumberFromRater, кроме случаев, когда один или несколько записей может иметь NULL, то Я думаю, вы можете просто агрегировать эти 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