如何逐月动态地进行数据透视,并仅显示全年前10名的前10名

时间:2017-09-06 17:24:00

标签: sql sql-server tsql reporting-services pivot

我有一个动态数据集,可以从今天和一年前返回数据。 如何透过Description

来调整此数据并仅返回前10 NetWrittenPremium

我知道如何执行静态数据透视,但在这种情况下我会怎么做呢。

        ;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条记录。

enter image description here

理想的结果就是这样:

enter image description here

1 个答案:

答案 0 :(得分:0)

嗯取决于许多事情是什么是最佳解决方案。

如果每个描述都有相同的月份,您可以执行以下操作:

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设置为您的月份(我不相信您需要从当前表格PIVOT到所需的报告)。您还可以将查询中的总计用作总列。

如果他们没有所有日期,您可以强制他们在不同的日期执行CROSS JOIN到不同的描述表,然后再加入其余的表格。