【问题标题】:Reporting Services - get previous column value if current is NULLReporting Services - 如果当前为 NULL,则获取上一列值
【发布时间】:2016-05-23 09:47:59
【问题描述】:

我正在尝试减小T-SQL 查询返回到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,是否可以实现一个公式,获取上一行的列值?

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

【问题讨论】:

  • 我认为这不能通过使用带有内置函数的表达式来完成。它可以通过使用自定义代码来完成,但考虑到您有数百列,它会影响处理时间。在减少数据检索时间的同时,也增加了处理时间。

标签: tsql reporting-services sql-server-2014


【解决方案1】:

为什么不直接使用 Group BY

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

或者

SELECT count(Id) as rowRepeatNum,Country,City 
FROM myTable 
GROUP BY Country,City

如果您的 ID 是连续的,则第一种方法会起作用,尽管我不确定 ID 是否重要。

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

能否提供有关您的用例的更多信息?

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多