在一行SSRS中分组顶部n和底部n

时间:2014-07-22 15:55:34

标签: sql-server reporting-services report

我有一个每日报告向我展示一个简单的网格:[Id],[Descripction]和[Qty]。 用户要求我只显示前10个数量值,好,我应用过滤器前n,要求在一行中显示其他值,说"其他",我知道如何在图表中执行此操作,但我从未在Tablix中执行此操作。

请帮忙。

由于

1 个答案:

答案 0 :(得分: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中拉出前十条记录然后联合并总结所有其他记录,给出一些虚假ID以显示哪些是总记录

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