私はこのようなデータテーブルを持っています。SQLパーティション行のグループを交互に変更することによって
|Key|LotId|TransactionType|Quantity|Destination
|1 |A |Transform |NULL |Foo
|2 |A |Transform |NULL |Bar
|3 |A |Consume |100 |NULL
|4 |B |Transform |NULL |Bob
|5 |B |Transform |NULL |Fred
|6 |B |Consume |75 |NULL
|7 |B |Consume |50 |NULL
|8 |B |Transform |NULL |Sally
|9 |B |Transform |NULL |Fred
|10 |B |Consume |60 |NULL
|11 |C |Transform |NULL |Bar
|12 |C |Transform |NULL |Fred
|13 |C |Consume |25 |NULL
変換線は、量がどこに行き、消費量がどのくらいの量を使用しているかを教えてくれます。消費ラインは、前のLotIdまでのそのLotIdのすべての前の変換ラインに適用されるか、前の変換&が同じLotIdである場合、グループ化を消費する。さらに、レンチを1つ追加すると、グループ内の変換および消費線の数が変化します。私が働いていることの一つは、変換ラインが最初に来て、消費した次回に新しいグループが始まったことを知っていることです。
|Key|LotId|TransactionType|Quantity|Destination|Grouping
|1 |A |Transform |NULL |Foo |A1
|2 |A |Transform |NULL |Bar |A1
|3 |A |Consume |100 |NULL |A1
---------------------------------------------------------
|4 |B |Transform |NULL |Bob |B1
|5 |B |Transform |NULL |Fred |B1
|6 |B |Consume |75 |NULL |B1
|7 |B |Consume |50 |NULL |B1
---------------------------------------------------------
|8 |B |Transform |NULL |Sally |B2
|9 |B |Transform |NULL |Fred |B2
|10 |B |Consume |60 |NULL |B2
---------------------------------------------------------
|11 |C |Transform |NULL |Bar |C1
|12 |C |Transform |NULL |Fred |C1
|13 |C |Consume |25 |NULL |C1
(この例の目的のために、我々は数量がすべての当事者間で均等に分割されていることだけを前提とします)
- グループA1グループB1
- フー&バーの間に100分割がありましたボブとフレッドの間に125のスプリットがあった
- グループB2サリーの間で60スプリットがあった&フレッド
- グループC1スプリットされた25 SQL
RANK()
、DENSE_RANK()
、私は私にこのグループを与えるクエリを仕事にしようとしています&ROW_NUMBER()
ウィンドウを使用してトゥイーンバーとフレッド
。このグループ分けができたら、データを自分自身に戻して、最終的に私の目的地のどれがどれくらい受け取ったかを決定することができます。
これはSQL2008上です。
順序を適用するために使用されうる重要なシーケンシャル値はありますか? – scsimon
はい、キーはauto_identです。ここでは、簡単にできるので、順番にすべてを入れています。しかし、レコードをテーブルに挿入する順序を取得するために、そのキー値によって順序付けすることができます。 –
データ内の何がB1からB2への変化を示していますか? –