0
このクエリでは、PIVOTを月単位でPIVOTする構文と、SUM(NetWrittenPremium )。私は、以下のクエリを使用し、それを旋回するようにSSRSでMATRICSを使用している場合 このクエリをPIVOTして、SUM(NetWrittenPremium)でフィルタリングされたTOP 10レコードのみを表示する方法DESC
- その後の説明によってグループ分けした後、それだけで私の2の説明が表示されます。
;with cte_TopClasses
AS (
select
b.YearNum,
b.MonthNum,
REPLACE(ClassCode,'+','') + ' - '+ QLL.Description as Description,
SUM(Premium) as NetWrittenPremium
FROM tblCalendar b
LEFT JOIN ProductionReportMetrics prm ON b.MonthNum=Month(prm.EffectiveDate) AND b.YearNum = YEAR(EffectiveDate)
AND prm.EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND prm.EffectiveDate <= EOMONTH(GETDATE()) AND CompanyLine = 'Ironshore Insurance Company'
LEFT JOIN NetRate_Quote_Insur_Quote Q ON prm.NetRate_QuoteID = Q.QuoteID
LEFT JOIN NetRate_Quote_Insur_Quote_Locat QL ON Q.QuoteID = QL.QuoteID
LEFT JOIN (SELECT * FROM NetRate_Quote_Insur_Quote_Locat_Liabi nqI
JOIN (SELECT LocationID as LocID, MAX(ClassCode) as ClCode
FROM NetRate_Quote_Insur_Quote_Locat_Liabi GROUP BY LocationID) nqA
ON nqA.LocID = nqI.LocationID AND nqA.ClCode = nqI.ClassCode) QLL
ON QLL.LocationID = QL.LocationID
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,ClassCode, QLL.Description
)
SELECT
--TOP 10
RANK() OVER (ORDER BY NetWrittenPremium DESC) AS Rank, *
FROM cte_TopClasses
WHERE Description IS NOT NULL
ORDER BY NetWrittenPremium DESC,YearNum,MonthNum
結果はそのようになるはずです。
;with cte_TopClasses
AS (
select
b.YearNum,
b.MonthNum,
REPLACE(ClassCode,'+','') + ' - '+ QLL.Description as Description,
SUM(Premium) as NetWrittenPremium
FROM tblCalendar b
LEFT JOIN ProductionReportMetrics prm ON b.MonthNum=Month(prm.EffectiveDate) AND b.YearNum = YEAR(EffectiveDate)
AND prm.EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND prm.EffectiveDate <= EOMONTH(GETDATE()) AND CompanyLine = 'Ironshore Insurance Company'
LEFT JOIN NetRate_Quote_Insur_Quote Q ON prm.NetRate_QuoteID = Q.QuoteID
LEFT JOIN NetRate_Quote_Insur_Quote_Locat QL ON Q.QuoteID = QL.QuoteID
LEFT JOIN (SELECT * FROM NetRate_Quote_Insur_Quote_Locat_Liabi nqI
JOIN (SELECT LocationID as LocID, MAX(ClassCode) as ClCode
FROM NetRate_Quote_Insur_Quote_Locat_Liabi GROUP BY LocationID) nqA
ON nqA.LocID = nqI.LocationID AND nqA.ClCode = nqI.ClassCode) QLL
ON QLL.LocationID = QL.LocationID
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,ClassCode, QLL.Description
)
SELECT *
FROM (SELECT RANK() OVER (ORDER BY NetWrittenPremium DESC) AS Rank, *
FROM cte_TopClasses
WHERE Description IS NOT NULL) AA
WHERE AA.Rank <= 10
ORDER BY AA.NetWrittenPremium DESC, AA.YearNum, AA.MonthNum
ありがとう、ちょうど試しましたが、マトリックスでグループ化した後、結果は2レコードに過ぎません。私は上記のコードと写真を追加しました。 – Oleg
回答が新しい解決策で更新されました。私が働いていたいくつかのテストデータに対する迅速なテスト。試してみる。 –
OMG !!!正確に私が必要なもの。この問題を解決するために多くの時間を費やしました。 ありがとうSOOOOOリチャーズさん。 私はあなたに聞くことができますか?あなたはSQLでどのくらいの時間をコーディングしていますか?私はいつこのような論理を思いつくことができますか? ありがとう – Oleg