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

How to increment grouping number in query if consecutive values don't satisfy conditions defined?

我会简单描述一下问题。

 ----------------------------------------------------------------------------------------------------
|  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) 中的 table 中创建新行。

我必须应用的规则:

如果 UnitValue 数字不连续,则使用下一行。
如果 partlyValue 的二进制值发生变化,则使用下一行。

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

我显示的table是从长查询中得出的结果,用于演示问题。 RowNo 列是为显示预期结果而编写的。

我的问题是为了理解和思考解决问题的优雅方法, 所以概念性的查询示例或解决方案对我来说很好,只要它能让我朝着正确的方向前进。

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

我认为您只需要 window 函数。遵循逻辑有点困难,但这可以满足您的需求:

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;