在 SQL SERVER 的 UPDATE 语句中使用 CASE to select 列进行 SET

using CASE to select column for SET in UPDATE statement IN SQL SERVER

我要执行下面的语句。是否可以 select 使用 CASE 更新哪一列?

UPDATE TABVAR CASE 
WHEN M BETWEEN 0 AND 6 THEN SET M0_TO_6 = M
WHEN M BETWEEN 7 AND 18 THEN SET M7_TO_18 = M
WHEN M BETWEEN 19 AND 54 THEN SET M19_TO_54 = M
WHEN M > 54 THEN SET MABOVE54 = M
END

不是那样,但你可以像这样做基本相同的事情:

UPDATE TABVAR
set 
  M0_TO_6 = CASE WHEN M BETWEEN 0 AND 6 THEN M else M0_TO_6 end,
  M7_TO_18 = CASE WHEN M BETWEEN 7 AND 18 THEN M else M7_TO_18 END,
  ...

通过这种方式,您可以将值 M 更新到列中,或者更新其中已存在的值。

你不能像那样使用 case 表达式,只能对 return 一个 (l-) 值使用。但是,您可以使用每列的 case 表达式来模拟这种行为:

UPDATE tabvar
SET 
m0_to_6 = CASE WHEN m BETWEEN 0 AND 6 THEN m ELSE m0_to_6 END,
m7_to_18 = CASE WHEN m BETWEEN 7 AND 18 THEN m ELSE m7_to_18 END,
m19_to_54 = CASE WHEN m BETWEEN 19 AND 54 THEN m ELSE m19_to_54 END, 
mabove54 = CASE WHEN m > 54 THEN m ELSE mabove54 END

我认为您需要这种类型的查询:

UPDATE TABVAR 
SET M0_TO_6 = CASE WHEN M BETWEEN 0 AND 6 THEN M ELSE M0_TO_6 END,
    M7_TO_18 = CASE WHEN M BETWEEN 7 AND 18 THEN M ELSE M7_TO_18 END,
    M19_TO_54 = CASE WHEN M BETWEEN 19 AND 54 THEN M ELSE M19_TO_54 END,
    MABOVE54 = CASE WHEN M > 54 THEN M ELSE MABOVE54 END