首页 > 解决方案 > SQL server - 根据其他列的值更新一列

问题描述

假设表中有五列,我想根据 A、B、C、D 列的值更新 E 列。如果对应的值为 Y,则将列名作为 E 列中值的一部分写入。预期结果显示在第二张图像中。

原来表中的数据是这样的

在此处输入图像描述

预期结果:

在此处输入图像描述

标签: sqlsql-server

解决方案


如果你的列数是固定的,那么你可以使用一个CASE语句。

样本数据

create table data
(
  A nvarchar(1),
  B nvarchar(1),
  C nvarchar(1),
  D nvarchar(1),
  E nvarchar(10)
);

insert into data (A, B, C, D) values
('Y', 'N', 'Y', 'Y'),
('N', 'N', 'N', 'Y'),
('N', 'Y', 'Y', 'N'),
('Y', 'Y', 'Y', 'N');

解决方案

update d
set d.E = substring(
          case d.A when 'Y' then ',A' else '' end
        + case d.B when 'Y' then ',B' else '' end
        + case d.C when 'Y' then ',C' else '' end
        + case d.D when 'Y' then ',D' else '' end,
         2, 100)
from data d;

结果

select * from data;

A   B   C   D   E
--- --- --- --- -------
Y   N   Y   Y   A,C,D
N   N   N   Y   D
N   Y   Y   N   B,C
Y   Y   Y   N   A,B,C

SQL小提琴


推荐阅读