我将简要描述问题。
----------------------------------------------------------------------------------------------------
| 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列以显示预期结果。
我的问题是要了解和思考解决问题的优雅方法,因此,只要可以使我朝正确的方向发展,概念性查询示例或解决方案对我来说就很好。
您需要在解决方案资源管理器中编写函数。
我认为您只需要窗口功能。遵循逻辑有点困难,但这可以满足您的要求:
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;