[英]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.