在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语句是否可以按照我想要的方式集成到案例中。因此,我需要知道。