在SQL SERVER中使用CASE为UPDATE语句中的SET选择列

在SQL SERVER中使用CASE为UPDATE语句中的SET选择列,sql,sql-server,sql-update,case,Sql,Sql Server,Sql Update,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 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更新到列中,或者更新列中已经存在的值。

您不能使用这样的
大小写表达式,而只能返回(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

@JamesZ的解决方案对你有用,但我和Martin一样好奇的是,为什么你有四列。对我来说,它看起来像年龄:儿童、年轻人、成年人、老年人。当一个从7岁到18岁的人年满19岁时会发生什么。这是一种我需要创建的报告,我需要以这种方式显示数据。它不是年龄,也不是月数,它将每月使用一次,而且不会超过这个时间。“所以,如果数据发生了一些变化,那就没什么大不了的了。”马丁史密斯说。它们将是计算列,但我正试图找到一个更好的选项来提高性能,因为数据将是海量的;那还不错:)祝你好运!非常感谢您的澄清。以上给出的解决方案我已经知道了。抱歉没有透露。我不确定SET语句是否可以按照我想要的方式集成到案例中。因此,我需要知道。