2017-01-23 3 views
0

Meine Daten wie folgt aussieht:wie Tabelle Joinbedingung auf Basis von Spaltenwert

enter image description here

Wie Sie ich habe doppelte Premium von $ 41 zu sehen. Wenn ich in meinem JOIN Zustand sagen:

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

Dann werde ich nicht NULL Wert in PolicyNumberFromRater Spalt sehen. Aber ich will NULL nicht nur für bestimmte LineGUID sehen, nicht für alle von ihnen.

Grundsätzlich möchte ich sagen: Nutzung Zustand AND agg.policyNumber IS NOT NULL nur für LineGUID = CF144437... Aber wenn seine gonna andere sein LineGUID dann will ich NULL in `PolicyNumberFromRater sehen.

Wie kann ich das tun, wenn ich Tische zusammenfüge?

Die Tabelle, die LineGUID enthält, ist tbl.Quotes, die auch in einem JOIN gefunden werden kann.

Hier ist meine komplette 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 

Antwort

1

können Sie wie diese versuchen, wenn LineGUID anderen Wert und ag g.policyNumber isnull, die Bedingung ist ''! = '*' (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

Danke. Großartige Idee. – Oleg

2

Wenn Sie nur mit der Situation umgehen wollen Sie beschrieben, nämlich Aufzeichnungen Umgang mit dem alle Spalten Duplikat sind mit Ausnahme von PolicyNumberFromRater, wo ein oder mehrere Datensätze NULL haben, dann ich glaube, Sie können nur jene NULL Werte aggregieren entfernt GROUP BY mit:

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

Vielen Dank. Es klappt. – Oleg

Verwandte Themen