2016-04-12 22 views
0

arasındaki değerleri yeniden dağıtma Satın alma verilerini kullanarak ilaç kapsamını 3 yıllık bir süre boyunca eşleştirmeye çalışıyorum. Kapsam, ayda en az bir dozun mevcut olduğu düşünülmektedir. Örnek: Aşağıdaki alanları ve örnek bir temel tablo inşa var 11.SQL Server tablosunda yineleyin, sütunlar

vasıtasıyla ayda bir ay 6 kapalı olarak kabul edilecektir 6. ilaç A 6 doz satın Bu

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

olduğu değer Daha sonra, belirli bir hasta sadece 1 doz/ay ihtiyacı yana her bir hasta

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

için drugType kapsama görebilmek için toplu, ancak gelecekte herhangi bir noktada ilave doz kullanmak ücretsizdir, isterim 1'in üzerindeki herhangi bir değeri yeniden dağıtmak bir sonraki müsait 'boş' ay. Temel olarak her ay sütunu yineleyip 1'in üzerinde bir doz almak ve bu değeri 0 ay boyunca daha sonraki aylara dağıtmak (geriye dağıtılamıyor, ay2 -> ay1).

Beklenen Sonuç:

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

hiç boş ay ben bir holding sütuna kalan dozları eklemek istiyorum varsa, en diyelim işte banka '.

Hayatım boyunca bunun SQL ile nasıl çözüleceğini anlayamıyorum. Bunu SQL Server'da çalıştırıyorum. While ve If/Then cümlelerine baktım, ama bunları bu duruma nasıl uygulayacağımı anlamıyorum.

cevap

1

İlk düşüncem INSERT noktasında bunu düzeltmek, böylece zaten bir tane olan bir ay için hiçbir zaman bir doz eklemezsiniz. Sahip değilseniz veya INSERTs numaralı uygulamayı kontrol edemiyorsanız, bir TRIGGER kullanabilirsiniz.

bir seçenek değilse bir PatientID & DrugType için doz SUM ve sonra PurchaseMonth ile başlayan böylece ben senin roll-up kodu değiştirmeden içine olmazdı ay görmezden, ondan sonra her sütun 1 eklenir orijinal tabloda sütun. UNPIVOT veri, satırlar oluşturmak ve PIVOT sonra bunu yapmak daha kolay olabilir.