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