我正在尝试使用购买数据绘制3年期间的药物覆盖率。覆盖范围被认为每月至少有一剂可用。例如:我在第6个月购买6剂A药。我将被视为6至11个月的保险。
我构建了一个包含以下字段和示例值的基表
PatientID PurchaseMonth Doses DrugType Month1 Month2 Month3 ... Month36
1234 1 2 NSAID 1 1 0 0
1234 1 1 NSAID 0 1 0 0
然后将其汇总以获得每位患者的DrugType覆盖率视图
Patient DrugType Month1 Month2 Month3 ... Month36
1234 NSAID 1 2 0 0
由于给定的患者每月仅需要1个剂量,但在将来的任何时候可以自由使用额外的剂量,我想将任何超过1的值重新分配到下一个可用的“空”月。< / strong>基本上迭代每个月的列,并将任何剂量超过1并在未来几个月内以0剂量分配该值(不能向后分配,比如说月2 - >月1)。
预期结果:
Patient DrugType Month1 Month2 Month3 ... Month36
1234 NSAID 1 1 1 0
如果不存在空白月份,我想将剩余剂量添加到保留栏中,让我们称之为“银行”。
对于我的生活,我无法弄清楚如何使用SQL解决这个问题。我在SQL Server上运行它。我看过While和If / Then子句,但看不到如何将它们应用于这种情况。
答案 0 :(得分:1)
我的第一个想法是在INSERT
处修复此问题,以便您永远不会将剂量添加到已有月份的月份。如果您不拥有或无法控制正在执行INSERTs
的应用程序,则可以使用TRIGGER
。
如果这不是一个选项,我会考虑更改您的汇总代码,以便SUM
PatientID
&amp; DrugType
,然后从PurchaseMonth
开始,在其后的每列中添加1,忽略原始表中的月份列。如果您UNPIVOT
数据,创建行,然后PIVOT
,则可能更容易执行此操作。