取り扱いが難しいことが証明されているレガシー製品データがいくつかあります。製品は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)を使用しましたが、成功しませんでした。私はそれを正しくやっていないと思います。
理想的には、次のような結果セットを生成できるようにしたいと思います:(セグメント列に注意)
-------------------------------------------------------------------
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..
理想的には、カーソルやループを避けたいです。クエリを使用して、複数のテーブルから派生した数百万のレコードを移行します。
よろしくお願いします。
編集 サンプルデータを更新して、分離する必要のあるグループが実際に連続していることを示しました。