2016-04-12 13 views
0

購入データを使用して3年間にわたってドラッグカバレッジをマップしようとしています。カバレッジは、1ヶ月に利用可能な少なくとも1つの用量を有すると考えられる。例:私は、次のフィールドとベーステーブルを構築してきたとの例では、これだったSQL Serverテーブル全体を反復し、列間の値を再配布します

PatientID PurchaseMonth Doses DrugType Month1 Month2 Month3 ... Month36 
1234  1    2  NSAID  1  1  0   0 
1234  1    1  NSAID  0  1  0   0 

値Iが11

通じヶ月6用のカバーとみなされる月6における薬物Aの6つの用量を買いますその後、与えられた患者はわずか1用量/月を必要とするので、各患者

Patient DrugType Month1 Month2 Month3 ... Month36 
1234  NSAID  1  2  0   0 

ためDrugTypeカバレッジのビューを取得するためにロールアップし、将来の任意の時点で、余分な投与量を自由に使用する、は私がしたいと思います1以上の任意の値を次に利用可能な「空の」月。本質的に各月の列を繰り返し、1を超える用量を服用し、その値を0服用で将来の月に分配する(後方に分布することはできない、例えばmonth2 - > month1)。

期待される結果:

Patient DrugType Month1 Month2 Month3 ... Month36 
1234  NSAID  1  1  1   0 

空の数ヶ月は、私はのは「銀行のことを呼ぶことにしましょう、保持列に残留用量を追加したい場合は存在しません。

私の人生にとって、私はSQLでこれに取り組む方法を理解できません。私はSQL Server上でこれを実行しています。 WhileとIf/Then節を見てきましたが、この状況にそれらを適用する方法は見当たりません。

答えて

1

私の最初の考えは、INSERTの時点でこれを修正することです。そのため、すでに1つの月に1回の線量を追加することはありません。 INSERTsを実行しているアプリケーションを所有していない、または制御できない場合は、TRIGGERを使用できます。それはオプションではない場合

することは、私は月に無視して、それの後に各列に1を追加し、PatientID & DrugTypeのためのあなたSUM用量ように、あなたのロールアップのコードを変更し、その後PurchaseMonthで始まるになります元のテーブルの列。 UNPIVOTのデータを作成し、行を作成してからPIVOTにすると、これが簡単になる場合があります。

関連する問題