それぞれの行のセットを返すストアド プロシージャがありますActivityUnitId
。
必要なのは、時間に基づく各 ActivityUnitId の上位 10 行です。私はこれを達成することができました、私のクエリは次のようになります
With Data AS
(SELECT
ProjectID,ActivityUnitID,Description,GroupID,
SUM(Hours) AS NoiseHours,
ROW_NUMBER() OVER(PARTITION BY ActivityUnitID ORDER BY SUM(Hours) DESC) as 'RowNum'
FROM
tbl_Sub
INNER JOIN
tbl_AnalysisData ON tbl_Sub.SubActivityID = tbl_AnalysisData.SubActivityID
INNER JOIN
tbl_Analysis ON tbl_AnalysisData.LookupID = tbl_Analysis.LookupID
INNER JOIN
tbl_ActivityUnit ON tbl_ActivityUnit.ActivityUnitID = tbl_Sub.ActivityUnitID
tbl_Suby.ProjectID = @ProjectID
AND
tbl_Sub.ActivityUnitID = ISNULL(@ActivityUnitID,tbl_Sub.ActivityUnitID)
GROUP BY
ActivityUnitID,ProjectID, Description,AUGroupID
) SELECT * from Data where RowNum<=10
「RowNum」列には、各行の行番号が含まれており、その値は時間に基づいて割り当てられています。したがって、最初の 10 行には上位 10 時間の行が含まれます。
今私が欲しいのは、各 ActivityUnitID の最後に追加の要約行を追加することです。これには、除外されたすべての行の時間の合計が含まれます。つまり、RowNum > 10 の要約行です。
最終的に得られるのは、各 ActivityUnitID の上位 10 行と、その ActivityUnitID の他の行の時間を合計する追加の行です。
たとえば、2列のテーブルがあるとしましょう
ID Hours RowNum
1A 30 1
2B 20 2
3C 10 3
4D 5 4
5E 4 5
6F 3 6
これを選択して、RowNum <=3 の行と、他の行を合計した別の行を取得するにはどうすればよいですか
ID Hours
1A 30
2B 20
3C 10
Oth 12