包装一系列数据

时间:2018-03-15 08:56:31

标签: sql sql-server reporting-services

如何从表格中选择滚动/包装*行?

我正在尝试为每天选择一些记录(每种类型,2或3),在我用完时将其包裹起来。 例如。

2018-03-15: YyBiz, ZzCo, AaPlace  
2018-03-16: BbLocation, CcStreet, DdInc

这些是在Dynamics CRM的SSRS报告中呈现的,因此我可以进行简单的查询后操作。

目前我到达:

2018-03-15: YyBiz, ZzCo  
2018-03-16: AaPlace, BbLocation, CcStreet

首先,为每条记录获取一个数字:

SELECT name, ROW_NUMBER() OVER (PARTITION BY type ORDER BY name) as RN
FROM table

在SSRS中,我然后调整RN以反映我需要的每种类型的数量:

OnPageNum = FLOOR((RN+num_of_type-1)/num_of_type)-1
--Shift RN to be 0-indexed.

导致AaPlace, BbLocationCcStreet的PageNum为0,DdInc为1,... YyBizZzCo为8。

然后使用链接到数据集的SSRS表/矩阵,我将行过滤器设置为:

RowFilter = MOD(DateNum, NumPages(type)) == OnPageNum

其中DateNum基本上是自纪元以来的天数,并且每个页面都有一个单独的表格和日期传入。

此时,它每页只显示type的N条记录,但如果某种类型的记录总数不是该类型每页记录数的倍数,那么将记录的记录少于所需的页面。

有没有更简单的方法来接近这个/下一步是什么?

*在电子游戏中找到诸如Wraparound之类的内容,无缝重置为0.

1 个答案:

答案 0 :(得分:0)

为了达到这个效果,我发现将RowNumber偏移-DateNum*num_of_type(正排序为负),然后模COUNT(type)将提供正确的"环绕&#34 ;效果。

为了达到理想的分页效果,只需按num_of_typefloor进行分割,如下所示:

RowFilter: FLOOR(((RN-DateNum*num_of_type) % count(type))/num_of_type) == 0