トランザクションデータを取得して、分析のニーズを満たすためにクレンジングしようとしています。トランザクションをデータベースに記録する方法にはいくつかの制限があり、私はそれらの制限を回避しようとしています。
顧客が複数の製品を注文した場合、トランザクションデータベースは複数の製品をリンクしません。各製品には一意の販売IDがありますが、複数の販売IDを1つの注文にグループ化する方法はありません。サンプルは次のとおりです。
OrderID MultOrderID CustomerID SalesDate SalesTime ProductID ProductCost ShippingCost
6082346 7661X0A 2012-06-12 959 105 99.99 7.95
6082347 5809812YY6Y T891002 2012-06-12 1005 222 99.95 7.95
6082348 5809812YY6Z T891002 2012-06-12 1005 273 22.95 1.00
6082349 5809812YY71 T891002 2012-06-12 1005 285 499.95 1.00
6082350 5809812YY72 T891002 2012-06-12 1005 172 49.95 1.00
6082351 5809812YY73 T891002 2012-06-12 1005 105 99.99 7.95
6082352 5809812YY74 X637251 2012-06-12 1010 285 499.95 7.95
6082353 5809812YY75 X637251 2012-06-12 1010 30 1024.99 1.00
6082354 T512AT0 2012-06-12 1017 172 49.95 7.95
このトランザクションシステムの追加の制限は、4つを超える製品を一緒に出荷できないことです。顧客が5つの製品を注文した場合、4つの製品が一緒に出荷され(1つの配送料が請求され)、残りの製品は別々に出荷され、別の配送料が請求されます(はい、ビジネス全体がこのレガシーシステム全体を再構築したいと考えています... 。)。
私が判断しようとしているのは、注文ごとに出荷される製品の数と、製品コストと送料の合計です。
MultOrderIDの最後の4文字を見ると、それが連続していることがわかります。YY6YはYY6Zになり、YY71、YY72にロールオーバーします。ロジックは標準化されています。CustomerID、SalesDate、SalesTimeが同じであれば、製品をペアにすることができます。私が知らないのは、これをどのように達成できるかということです。
これを実現する方法は、CustomerID、SalesDate、SalesTimeで注文を分割することだと思います。次に、、for-loop
またはそのようなものを取得して、個々のエントリを循環します。次に、MultOrderIDの最後の4文字を探して、次のように言います。-1、2、3が同じで、4番目の文字が前の注文の4番目の文字の後にある場合は、最大4つの注文でペアにします。orderIDが範囲内の5番目から8番目の注文である場合、それは出荷2などです。
これはで行うことができますSQL Server
か?そうでない場合、私はこれを何に書くべきですか?そして、for-loop
私はこの場合に何を使うべきですか?
編集:これが私が取得しようとしている出力です。4番目の製品が出荷された後、注文を再開する必要があることに注意してください(つまり、6つの製品が2つの出荷[4つの製品と2つの製品]に分割され、9つの製品が3つの出荷[4、4、および1]に分割されます。
PRODUCTSSHIPPED SALESDATE SALESTIME CUSTOMERID PRODUCTCOST SHIPPINGCOST
4 6/12/12 1005 T891002 672.8 10.95
1 6/12/12 1005 T891002 99.99 7.95
2 6/12/12 1010 X637251 1524.94 8.95
1 6/12/12 1017 T512AT0 49.95 7.95
1 6/12/12 959 7661X0A 99.99 7.95