如果连续值不满足定义的条件,如何在查询中增加分组编号?

问题描述 投票:0回答:2

我将简要描述问题。

 ----------------------------------------------------------------------------------------------------
|  Total   UnitName    UnitValue  PartlyStatus   PartlyValue   CountMetric    CountValue   |   RowNo    
|                                                                                          |  
|   79        A           7654         B               0            C             360      |     1      
|   79        A           7656         B               0            C             360      |     2      
|   79        A           7657         B               0            C             360      |     2      
|   79        A           7658         B               0            C             360      |     2      
|   79        A           7659         B               1            C             240      |     3      
|   79        A           7660         B               0            C             360      |     4      
|   79        A           7662         B               1            C             240      |     5      
|   79        A           7663         B               1            C             240      |     5      
|   79        A           7664         B               1            C             240      |     5      
|   79        A           7665         B               1            C             240      |     5      
|   79        A           7667         B               1            C             240      |     6      
|   79        A           7668         B               1            C             240      |     6      
|   79        A           7669         B               1            C             240      |     6      
|   79        A           7670         B               0            C             360      |     7      
|   79        A           7671         B               0            C             360      |     7      
|   79        A           7672         B               0            C             360      |     7      
  ---------------------------------------------------------------------------------------------------

如果不满足约束条件,我必须在SQL Server Reporting Services(SSRS)的表中创建新行。

我必须适用的规则:

如果UnitValue号不是连续的,请使用下一行。如果partlyValue的二进制值更改,请使用下一行。

我必须编写一个创建RowNo的查询,如果不满足条件,该查询将递增。

我显示的表是从长时间查询以演示问题得出的结果。编写RowNo列以显示预期结果。

我的问题是要了解和思考解决问题的优雅方法,因此,只要可以使我朝正确的方向发展,概念性查询示例或解决方案对我来说就很好。

sql sql-server tsql reporting-services ssrs-2008
2个回答
0
投票

您需要在解决方案资源管理器中编写函数。


0
投票

我认为您只需要窗口功能。遵循逻辑有点困难,但这可以满足您的要求:

select t.*,
       sum(case when prev_uv = unitvalue - 1 and
                     prev_pv = partlyvalue
                then 0  -- no new group
                else 1
           end) over (order by unitvalue) as rowno 
from (select t.*,
             lag(unitvalue) over (order by unitvalue) as prev_uv,
             lag(partlyvalue) over (order by unitvalue) as prev_pv
      from t
     ) t;
© www.soinside.com 2019 - 2024. All rights reserved.