SQL循环和更新表的总和

时间:2019-10-21 16:24:14

标签: sql sql-server

我有下面的shiftdate表,该表存储以rate1和rate2工作的小时数(这些工作时间存储在另一个表中)。我想使用此数据用总值更新shiftdateTotal字段。希望您能提供帮助吗?

SHIFTDATE表

  • shiftdateID int
  • hourlyRate1ID int
  • hoursRate1 int
  • hourlyRate2ID int
  • hoursRate2 int
  • shiftDateTotal十进制

LISTITEM表

  • ListitemID int
  • 描述字符串
  • rateOfPay十进制

listItem行示例(23,BankHolidayRate,12.50)

我能够创建一个执行所需计算的SQL选择,请参见下文:

    SELECT shiftDateID,
    hoursRate1, t2.rateOfPay as rate1,
    hoursRate2, t3.rateOfPay as rate2,
    (hoursRate1 * t2.rateOfPay) +  ([hoursRate2] * t3.rateOfPay) as myTotal
    from dbo.ShiftDate t1 

    inner join dbo.ListItem t2
    on t1.hourlyRate1ID = t2.listItemID

    inner join dbo.ListItem t3
    on t1.hourlyRate2ID = t3.listItemID

但是现在我有点迷失了。使用此查询或类似的方法,如何将myTotal值插入所需的shiftdateID行的shiftDateTotal中?

我可以将其存储到临时表中,然后遍历数据并使用myTotal更新SHIFTDATE表吗?

1 个答案:

答案 0 :(得分:2)

您可以将其转换为更新。转换非常直接:

update sd
    set shiftDateTotal = (sd2.hoursRate1 * li1.rateOfPay) + (sd2.hoursRate2 * li2.rateOfPay) 
from dbo.ShiftDate sd inner join
     dbo.ListItem li1
     on sd.hourlyRate1ID = li1.listItemID inner join
     dbo.ListItem li2
     on sd.hourlyRate2ID = li2.listItemID;

注意:

  • 我用更有意义的表别名(表名的缩写)代替了无意义的表别名(t1t2t3)。
  • 我对所有列名进行了限定。
  • 如果原始表中的任何费率ID均为NULL /缺失,您可能要小心。在这种情况下,您需要left join s和coalesce() s。