SQL:使用CASE WHEN更改列值

3

我正在创建新的列,但特别想说的是如果某一列的值等于某个值,则更改相应的列。例如:

SELECT
     Col1 as c1
    ,Col2 as c2
    ,CASE CAST([COB] as varchar(50))
        WHEN 'Engineering' then set c1 = 1
        ELSE 0
    END AS [Class of Business]
FROM
     ....

但我无法让它正常工作。例如,如果列 [COB] 中的一个条目是“engineering”,那么我希望它将(在同一行上)列 c1 设置为 0,否则只需用 0 填充列 c1。


你需要更新表格吗? - Vamsi Prabhala
不,我只是在查询它。 - user33484
1
请发布一个数据集和一个期望的结果集。 - Joe Taras
4个回答

3
如果你只是想查询你的表格,你可以根据COB状态返回1或0,而无需重新分配给c1新值。
试一下这个:
SELECT
CASE 
    WHEN CAST([COB] as varchar(50)) = 'Engineering' then 1
    ELSE Col1
END AS c1,
Col2 as c2
FROM ...

问题是我想将c1列设为0或1,而不是[业务类别]列。 - user33484
@user33484:好的,祝您有愉快的一天。 - Joe Taras

2

这不是SELECT的工作方式。您需要寻找类似以下内容的东西:

SELECT
    --Col1 as c1
    CASE CAST([COB] as varchar(50))
        WHEN 'Engineering' then 1
        ELSE 0
    END AS c1 
    ,Col2 as c2
    ,COB as [Class of Business]
FROM

问题是我想将列c1设置为0或1,而不是[业务类别]列。 - user33484
更新的答案。 - Dan Field

2

所以当COB = 工程时,您希望c1为1,否则只保留C1的当前值。如果是这种情况,则......

SELECT
    CASE CAST([COB] as varchar(50))
        WHEN 'Engineering' then 1
        ELSE c1
    END AS c1
    ,Col2 as c2
FROM
..

1
你为什么要使用 cast()
SELECT Col1 as c1,
       Col2 as c2,
       (CASE WHEN [COB] = 'Engineering' THEN 1 ELSE 0 END) as [Class of Business]
FROM . . .;

您可以使用搜索的CASE来实现此目的。但是,通过一次比较,我认为上述方法更易于阅读。


CAST是因为这是一个更大查询的一部分,我需要使用CAST。你在这里的代码将业务列的类别更改为0或1,但我根本不想改变那个,我只想改变Col1。 - user33484

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接