【问题标题】:how to join table using condition based on column value如何使用基于列值的条件连接表
【发布时间】:2017-01-23 23:50:15
【问题描述】:

我的数据如下所示:

如您所见,我有重复的 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 

那么我不会在PolicyNumberFromRater 列中看到NULL 值。 但我不想只为特定的LineGUID 看到 NULL,而不是所有这些。

基本上我想说:使用条件AND agg.policyNumber IS NOT NULL 仅用于LineGUID = CF144437... 但如果它是其他LineGUID,那么我确实想在`PolicyNumberFromRater 中看到NULL

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

包含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

【问题讨论】:

    标签: sql-server tsql join case


    【解决方案1】:

    如果您只想处理您描述的情况,即处理除PolicyNumberFromRater 之外的所有列都重复的记录,其中一条或多条记录可能有NULL,那么我认为您可以汇总那些@987654323使用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
    

    【讨论】:

      【解决方案2】:

      你可以这样试试,当 LineGUID 为其他值且 agg.policyNumber 为空时,条件将是 ''!='*'(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  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 2019-09-24
        • 2015-04-01
        相关资源
        最近更新 更多