【问题标题】:How to update column values which is resulted in select statement如何更新在 select 语句中产生的列值
【发布时间】:2023-01-19 21:38:38
【问题描述】:

我试图从给定值中找到偶数或奇数,问题是我想更新导致 select 语句的 E_and_o 列。有谁可以帮助我吗。

不知道我哪里做错了。

Create table EvenRodd(
Nrow INT,
E_and_O VARCHAR(15));


///Select statement//
Select nrow, E_and_O,
Case
When Mod(nrow, 2) != 0 then 'Odd'
When Mod(nrow, 2) = 0  then 'Even'
end
From EvenRodd;

//Update //////
Update evenrodd set e_and_o = (Select evenrodd.nrow,
Case
When Mod(evenrodd.nrow, 2) != 0 then 'Odd'
When Mod(evenrodd.nrow, 2) = 0  then 'Even'
end
From EvenRodd) WHERE e_and_o IS NULL; 

【问题讨论】:

  • 为什么要使用 ((uncorrelated) 子查询?为什么不直接将 CASE 表达式作为赋值表达式?
  • 或者,更好的是,考虑到该值基于 Nrow 的值,为什么不使用计算列?

标签: sql sql-server


【解决方案1】:
Update evenrodd set e_and_o = 
Case
When Mod(nrow, 2) != 0 then 'Odd'
When Mod(nrow, 2) = 0  then 'Even'
end

编辑:如果你想将 e_and_o 设置为计算列,而不是每次都更新它:

ALTER TABLE evenrodd DROP COLUMN e_and_o;
ALTER TABLE evenrodd ADD e_and_o AS  
Case
When Mod(nrow, 2) != 0 then 'Odd'
When Mod(nrow, 2) = 0  then 'Even'
end;

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2022-01-23
    • 1970-01-01
    • 2013-01-05
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多