2016-11-29 26 views
2

我有兩個CTEProducerCode,ProducerLocationIDProducerName。但由於最終用戶的錯誤,ProducerName在這兩個CTE之間可能略有不同。 我怎樣才能SUMProducerCodeProducerLocationID分組,但只保留一個ProducerName(可以說從第一個CTE)?如何總計總計但只保留一個名稱

這是我現在得到:

enter image description here 兩排ProducerCode 1321和1587 ProducerLocationID需要有NetWrittenPremium爲767109這是(469956.00 + 297153.00)。同樣的,WPNewBusiness,但只能有一個ProducerName爲 '哈利·w ^戈斯特CO。INC'

我需要這樣的:

enter image description here

這裏是我完整的查詢:

 ;WITH cte_TopWP --T 
AS 
    (
     SELECT ProducerCode,[Producer Location ID], Producer, 
       SUM(premium) as NetWrittenPremium, 
       SUM(CASE WHEN PolicyType = 'New Business' THEN Premium ELSE 0 END) as WPNewBusiness, 
       SUM(CASE WHEN PolicyType = 'Renewal' THEN Premium ELSE 0 END) as WPRenewal, 
       SUM(CASE WHEN PolicyType = 'Rewrite' THEN Premium ELSE 0 END) as WPRewrite, 
       SUM(CASE WHEN PolicyType = 'New Business' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) as BindsNewBusiness, 
       SUM(CASE WHEN PolicyType = 'Renewal' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) as BindsRenewals, 
       SUM(CASE WHEN PolicyType = 'Rewrite' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) as BindsRewrite, 
       SUM(CASE WHEN PolicyType = 'New Business' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) + SUM(CASE WHEN PolicyType = 'Renewal' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) + SUM(CASE WHEN PolicyType = 'Rewrite' AND TransactionType = 'Policy' THEN 1 ELSE 0 END) as PolicyCount   
     FROM ProductionReportMetrics 
     WHERE EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND EffectiveDate <= EOMONTH(GETDATE()) AND TransactionType = 'Policy' AND CompanyLine = 'Plaza Insurance Company' AND ProducerType = 'Wholesaler' 
     GROUP BY ProducerCode, 
       [Producer Location ID],Producer 
    ) 
    , 
    cte_Counts --C 
AS 
    (
     SELECT ProducerCode,ProducerLocationID, 
       COUNT (distinct ControlNo) as Submissions, 
       SUM(CASE WHEN QuotedPremium IS NOT NULL THEN 1 ELSE 0 END) as Quoted, 
       SUM(CASE WHEN Status = 'Declined' THEN 1 ELSE 0 END) as Declined 
     FROM ClearanceReportMetrics 
     WHERE EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND EffectiveDate <= EOMONTH(GETDATE()) AND CompanyLine = 'Plaza Insurance Company' 
     GROUP BY ProducerCode, 
       ProducerLocationID 
    ) 

SELECT 

      TOP 10 RANK() OVER (ORDER BY NetWrittenPremium desc) as Rank, 
      ROW_NUMBER() OVER (PARTITION BY t.ProducerCode, t.[Producer Location ID] ORDER BY NetWrittenPremium DESC) as num,   
      t.ProducerCode, 
      t.[Producer Location ID], 
      t.Producer as ProducerName , 
      NetWrittenPremium, 
      WPNewBusiness, 
      WPRenewal, 
      WPRewrite, 
      PolicyCount, 
      Submissions, 
      Quoted, 
      BindsNewBusiness, 
      BindsRenewals, 
      BindsRewrite, 
      Declined 
FROM  cte_TopWP t INNER JOIN cte_Counts c ON t.ProducerCode=c.ProducerCode and c.ProducerLocationID=t.[Producer Location ID]  
ORDER BY  
      NetWrittenPremium DESC 
+0

一個CTE是否有可靠的ProducerName? – jabs

+0

好吧...讓我們說第一個cte。 – Oleg

+0

認爲producername位於第二CTE。由於這個名字只在第一個CTE中出現,我看不到找到它的方法。你有不同的表格可以用來找到正確的名字嗎? – jabs

回答

3

你可以在您的cte_TopWP cte中使用max(Producer),並從Group by聲明中刪除Producer

+0

感謝#SqlZim。現在完美運作。唯一讓我感到尷尬的是因爲它太容易了:) 再次感謝 – Oleg

+0

沒有理由不好意思。樂於幫助! – SqlZim

+0

這個工作,但只有當正確的是最大。在這個例子中,它是對所有人而言的? – jabs