You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何通过条件判断按规则迁移列值到对应列

解决方案

SQL Server中做逐行条件判断、将列值按规则拆分到不同目标列时,不需要使用批处理/存储过程里的IF...ELSE流控制语句,直接用CASE表达式即可,逻辑和你写的伪代码完全匹配。

实现代码

假设你的原表名为ArticleData,执行如下查询即可得到你期望的结果:

SELECT
    Article,
    [Desc.],
    -- UM为PC时取Value值,否则返回NULL
    CASE WHEN UM = 'PC' THEN Value END AS [Value PC],
    -- UM为CT时取Value值,否则返回NULL
    CASE WHEN UM = 'CT' THEN Value END AS [ValueCT]
FROM ArticleData;

注意:SQL Server中如果列名包含空格、特殊符号或者和关键字重名(比如你这里的Desc.、Value PC),必须用方括号[]包裹标识符,否则会报语法错误。

逻辑对应说明

CASE表达式的执行逻辑和你写的伪代码一一对应:

  • 伪代码中if UM = 'PC' then 移动值到"Value PC"列的逻辑,对应第一个CASE分支:逐行校验UM字段,值为PC时返回当前行的Value字段内容,不满足条件时默认返回NULL
  • 伪代码中else 移动值到"Value CT"列的逻辑,对应第二个CASE分支:逐行校验UM字段,值为CT时返回当前行的Value字段内容,不满足条件时默认返回NULL

结果验证

上述查询返回的结果和你给出的期望输出完全一致:

ArticleDesc.Value PCValueCT
Item1Flower5001NULL
Item2Paper6001NULL
Item2PaperNULL6002
Item3PenNULL7001
Item4Eraser8001NULL

补充提示

  • 如果需要把查询结果持久化为新表,只需要在FROM子句前加INTO 新表名即可,例如INTO ArticleValueSplit
  • 如果后续UM字段新增了其他枚举值,只需要对应增加新的CASE分支列即可,不需要修改现有逻辑
  • 注意区分场景:IF...ELSE是控制整个T-SQL批处理执行路径的流控制语法,不适合做逐行的字段值计算,这类场景用CASE的执行效率和易用性都高很多。

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:39:17