2014-07-22 49 views
0

我有一個每日報告,顯示我一個簡單的網格:[Id],[Descripction]和[數量]。 用戶問我只顯示前10位的數量值,不錯,我應用過濾器Top n,但是也要求在一行中顯示其他值,表示「其他」,我知道如何在圖中執行此操作,但我從來沒有在Tablix那樣做過。組排名前n和後排n在一行SSRS

請幫忙。

感謝

+0

你的意思是你展示基於ID是10行(前十名),然後1,在排名前十不是加起來所有其他quantitys合計行,降序? –

+0

是的,那就是,我必須有11行,前10位一行一行,沒有前十位總和在一行。 – Necktru

回答

0

創建一些測試數據:

DECLARE @TopTen TABLE 
(
    Id INT, 
    Description VARCHAR(100), 
    Qty INT 
) 

INSERT INTO @TopTen 
(Id, Description, Qty) 
VALUES 
(1, 'Test1', 1), 
(2, 'Test1', 1), 
(3, 'Test1', 1), 
(4, 'Test1', 10), 
(5, 'Test1', 10), 
(6, 'Test1', 10), 
(7, 'Test1', 100), 
(8, 'Test1', 100), 
(9, 'Test1', 100), 
(10, 'Test1', 1000), 
(11, 'Test1', 1000), 
(12, 'Test2', 1), 
(13, 'Test2', 1), 
(14, 'Test2', 1), 
(15, 'Test2', 10), 
(16, 'Test2', 10), 
(17, 'Test2', 10), 
(18, 'Test2', 100), 
(19, 'Test2', 100), 
(20, 'Test2', 100), 
(21, 'Test2', 1000), 
(22, 'Test2', 1000); 

我在這裏取數據,整理出的數量爲CTE

WITH T AS 
(
    SELECT *, 
    ROW_NUMBER() OVER (ORDER BY QTY DESC) RN 
    FROM @TopTen 
) 

現在讓我們拉離前十名記錄CTE然後合併並總結所有其他記錄,給出一些虛假編號來顯示哪些是總計記錄

SELECT * FROM 
(
SELECT t.Id, t.Description, t.Qty, t.RN 
FROM T WHERE t.RN <= 10 
UNION 
SELECT 9999 AS Id, 
    MAX(t.Description) AS Description, 
    SUM(QTY), 
    9999 AS RN 
FROM T 
WHERE t.RN > 10 
GROUP BY t.Description 
) d 
ORDER BY RN, Description 

這裏是輸出:

Id Description Qty RN 
10 Test1 1000 1 
11 Test1 1000 2 
21 Test2 1000 3 
22 Test2 1000 4 
18 Test2 100 5 
19 Test2 100 6 
20 Test2 100 7 
7 Test1 100 8 
8 Test1 100 9 
9 Test1 100 10 
9999 Test1 33 9999 
9999 Test2 33 9999