我有一些已证明难以处理的遗留产品数据。产品可以与 1、2 或 3 个部件一起出售,并且系统的设计方式是,订购产品的部件 2 和 3 只是该产品第一行之后的后续行。
这是一些示例数据....
----------------------------------------------------------
OrderId Sku Type Row_Id OtherColumns...
----------------------------------------------------------
123 001 Double 0 Other stuff..
123 001 Double 1 Other stuff..
123 001 Double 2 Other stuff..
123 001 Double 3 Other stuff..
123 002 Single 4 Other stuff..
123 003 Triple 5 Other stuff..
123 003 Triple 6 Other stuff..
123 003 Triple 7 Other stuff..
123 001 Double 8 Other stuff..
123 001 Double 9 Other stuff..
123 002 Single 10 Other stuff..
123 002 Single 11 Other stuff..
123 002 Single 12 Other stuff..
123 002 Single 13 Other stuff..
旧软件 (VB) 通过遍历行并在循环时向前看,从行中获取所需的信息,然后跳过它们来处理这个问题。
快进 8 年……我在新工作中继承了这个系统,并从头开始重写了这个系统。我遇到的问题是将旧数据转换为我的新格式。
我正在寻找一种方法来选择相同的数据,并按适当的段号对其进行分区。我使用 RANK() OVER(PARTITION BY) 没有成功。我想我只是做得不对。
理想情况下,我希望能够生成如下所示的结果集:(注意 Segment 列)
-------------------------------------------------------------------
OrderId Sku Type Row_Id Segment OtherColumns...
-------------------------------------------------------------------
123 001 Double 0 1 Other stuff..
123 001 Double 1 2 Other stuff..
123 001 Double 2 1 Other stuff..
123 001 Double 3 2 Other stuff..
123 002 Single 4 1 Other stuff..
123 003 Triple 5 1 Other stuff..
123 003 Triple 6 2 Other stuff..
123 003 Triple 7 3 Other stuff..
123 001 Double 8 1 Other stuff..
123 001 Double 9 2 Other stuff..
123 002 Single 10 1 Other stuff..
123 002 Single 11 1 Other stuff..
123 002 Single 12 1 Other stuff..
123 002 Single 13 1 Other stuff..
理想情况下,我想避免使用游标或循环。我将使用查询来迁移从多个表派生的数百万条记录。
在此先感谢您的帮助。
编辑 我已经更新了示例数据,以表明我确实有需要隔离的背靠背组。