簡體   English   中英

如何按月動態透視表並僅按全年總數顯示前10名

[英]How to dynamically pivot table by month and display top 10 by total amount for the whole year only

我有一個動態數據集,該數據集返回今天和一年前的數據。 我該如何透視這些數據並僅返回NetWrittenPremium前10個Description

我知道如何執行靜態數據透視,但是在這種情況下我會困惑。

        ;with cte_TopClasses
    AS  ( 
            SELECT      
                        b.MonthNum,
                        b.YearNum,
                        GovClassCode + ' - ' + dda.GovClassDesc as Description,
                        ISNULL(SUM(Premium),0) as NetWrittenPremium 
            FROM        tblCalendar b 
            LEFT JOIN   ProductionReportMetrics prm ON b.YearNum = Year(prm.EffectiveDate) AND b.MonthNum=Month(prm.EffectiveDate) AND  CompanyLine = 'Arch Insurance Company'
            LEFT JOIN   [dbo].[Dynamic_Data_ArchWC] dda ON prm.QuoteGUID = dda.QuoteGuid    
            WHERE       
                        ( b.YearNum = YEAR(GETDATE())-1 and b.MonthNum >= MONTH(GETDATE())+1 ) OR 
                        ( b.YearNum = YEAR(GETDATE()) and b.MonthNum <= MONTH(GETDATE()) )      
            GROUP BY    b.YearNum ,
                        b.MonthNum, 
                        GovClassCode,   
                        dda.GovClassDesc
        )
   --here I want to pivot it
    select *
    from cte_TopClasses

當前結果為128條記錄。

在此處輸入圖片說明

理想的結果將是這樣的:

在此處輸入圖片說明

嗯,取決於很多事情,什么才是最佳解決方案。

如果每個描述的月數都相同,則可以執行以下操作:

SELECT TOP 12 * @NumberOfDescriptionsToReturn
    MonthNum
    , YearNum
    , Description
    , NetWrittenPremium 
    , SUM(NetWrittenPremium) OVER (PARTITION BY Description) Total
FROM #T1
ORDER BY 5 DESC

然后在SSRS中,將RowGroup設置為Description,並將ColumnGroup設置為Months(我不認為您需要從當前表到所需報告的PIVOT )。 您也可以將查詢中的總計用作總計列。

如果他們沒有所有日期,則可以通過在不同日期對不同的描述表進行CROSS JOIN來強制他們這樣做,然后將其余的表左CROSS JOIN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM