Tsql Reporting Services-如果current为NULL,则获取上一列值

Tsql Reporting Services-如果current为NULL,则获取上一列值,tsql,reporting-services,sql-server-2014,Tsql,Reporting Services,Sql Server 2014,我正在尝试减小查询返回到Reporting Services的数据的大小。例如,假设我们设置了以下行: ID Country City 1 Germany Berlin 2 Germany Berlin 3 Germany Berlin 4 Germany Berlin 5 Germany Hamburg 6 Germany Hamburg 7 Germany Hamburg 8 Germany Hamburg 9 Germany Berlin 10 Ge

我正在尝试减小查询返回到
Reporting Services
的数据的大小。例如,假设我们设置了以下行:

ID  Country City
1   Germany Berlin
2   Germany Berlin
3   Germany Berlin
4   Germany Berlin
5   Germany Hamburg
6   Germany Hamburg
7   Germany Hamburg
8   Germany Hamburg
9   Germany Berlin
10  Germany Berlin
它可以很容易地转换为:

ID  Country City
1   Germany Berlin
2   NULL    NULL
3   NULL    NULL
4   NULL    NULL
5   NULL    Hamburg
6   NULL    NULL
7   NULL    NULL
8   NULL    NULL
9   NULL    Berlin
10  NULL    NULL
由于我可能有成千上万的重复值(和数百列),我知道这样使用
NULLs
转换数据会大大减少返回数据的大小

如果当前值为
NULL
,是否可以实现一个公式来获取上一行的列值


我想测试一下,如果只渲染大量数据或处理较小的数据,但应用这样的表达式是否会更快。

为什么不直接使用分组方式呢

SELECT Min(Id) as min, Max(ID) as max,Country,City 
FROM myTable 
GROUP BY Country,City

如果您的Id是顺序的,那么第一种方法可以工作,尽管我不确定Id是否重要

第二种方法可以为您提供一个数字,以便在应用程序中相当快地生成重复行,并返回更少的行


能给我更多关于你用例的信息吗

我认为使用带有内置函数的表达式是无法实现的。这可以通过使用自定义代码来完成,但考虑到您有数百列,这将影响处理时间。在减少数据检索时间的同时,也增加了处理时间。
SELECT count(Id) as rowRepeatNum,Country,City 
FROM myTable 
GROUP BY Country,City