遍历SQL Server表,在列

时间:2016-04-12 18:36:26

标签: sql sql-server

我正在尝试使用购买数据绘制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子句,但看不到如何将它们应用于这种情况。

1 个答案:

答案 0 :(得分:1)

我的第一个想法是在INSERT处修复此问题,以便您永远不会将剂量添加到已有月份的月份。如果您不拥有或无法控制正在执行INSERTs的应用程序,则可以使用TRIGGER

如果这不是一个选项,我会考虑更改您的汇总代码,以便SUM PatientID&amp; DrugType,然后从PurchaseMonth开始,在其后的每列中添加1,忽略原始表中的月份列。如果您UNPIVOT数据,创建行,然后PIVOT,则可能更容易执行此操作。