如果要将新列添加到 TableA,然后使用表 B 中的值对其进行更新,这是最终的 UPDATE:
UPDATE TableA
SET Colour = B.Colour
FROM TableA A
INNER JOIN TableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)
如果表 B 中可能没有给定月份的数据和表 A 中的平均值,则应使用 LEFT OUTER JOIN 并提供默认值。
UPDATE TableA
SET Colour = ISNULL(B.Colour, N'SomeColour')
FROM TableA A
LEFT OUTER JOIN TableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)
此外,您应该检查表 B 中的数据是否取决于年份,就像表 A 似乎发生的那样。
在这种情况下,您应该将此字段添加到 Join 的 On 子句中:
UPDATE TableA
SET Colour = B.Colour
FROM TableA A
INNER JOIN TableB B ON B.Year = A.Year AND B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)
在运行更新之前,您可以通过首先运行此查询来检查您是否获得了所需的值:
SELECT Department, A.Month, Average, B.Colour
FROM @tableA A
INNER JOIN @tableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)
希望这可以帮助 :)