当前位置: 首页 > 面试题库 >

在SQL Server中使用case语句更新多列

海典
2023-03-14
问题内容

我想使用case语句更新表,查询是这样的…

select case(@columnname) when 'name1' then 
                                  begin
                                     update table
                                      set 
                                       pay1=pay1* 100
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end
                        when 'name2' then 
                                       begin
                                     update table
                                      set 
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end

                         when 'name3' then 
                                       begin
                                     update table
                                      set 
                                       pay3=pay3* 100
                                  end
                  end

您能告诉我正确的逻辑以使用case语句完成查询吗


问题答案:

您必须四处交换语法。case语句将应用于您要更新的每个值…

UPDATE table SET
    pay1 = CASE WHEN @columnname IN('name1') THEN pay1 * 100 ELSE pay1 END,
    pay2 = CASE WHEN @columnname IN('name1', 'name2') THEN pay2 * 20 ELSE pay2 END,
    pay3 = CASE WHEN @columnname IN('name1', 'name2', 'name3') THEN pay3 * 100 ELSE pay3 END

看来您实际上想要的是if语句。

IF @columnname = 'name1'
    UPDATE table SET pay1 = pay1 * 100, pay2=pay2*20, pay3=pay3* 100

ELSE IF @ColumnName = 'name2'
    UPDATE table SET pay2 = pay2 * 20, pay3 = pay3 * 100

ELSE IF @ColumnName = 'name3'
    UPDATE table SET pay3 = pay3 * 100

希望能有所帮助



 类似资料:
  • 问题内容: 我有一张桌子,我需要按以下方式显示输出。 rsp_ind = 0(表示“新”)和1(表示“ Accepted”(已接受))的行数 输出应为 我尝试使用以下查询。 和即时通讯输出为 有人可以帮助我调整查询以实现输出。注意:我不能为此加上一笔款项。它是更大程序的一部分,因此我无法为此添加超级查询。 问题答案: 您可以在此处查看此请求的输出

  • 问题内容: 我有这些表和值: 我想使用表1中的值及其各自的ID更新表2中的所有值。 有没有办法通过简单的SQL查询来做到这一点? 问题答案: 运行选择以确保它是您想要的 更新 另外,请考虑使用,以便在需要时可以将其回滚,但请在满意时再进行确认。

  • 问题内容: 有什么办法可以在HQL中执行以下操作: 问题答案: 我想你可以(3.6,4.3) [联编辑] …对于那些子句: “简单”情况和“搜索”情况,

  • 我正在尝试使用postgres更新多行,我正在使用以下代码: 如果我创建一个新表,它可以完美地工作,但是当在具有800万行的大表上运行它时,它会无限期地挂起。我首先在管理员(Web界面)和控制台中尝试。 然而,这工作得很好: 我不太愿意在我的代码中实现这种方法,因为我一次会有数千个更新,并且更愿意将它们放在一个语句中。关于为什么第一个例子会挂postgres,而第二个例子会很好地工作,有什么想法吗

  • 问题内容: 我的结构表如下: 我需要使用一条语句一次更新三行,以便第二列分别为5、3、2。 我使用以下查询,但似乎缺少一些内容 我的问题是这样吗?如果没有,我可以使用语句吗?或者我只能选择在一个语句中使用它来实现这一点? 请注意,这是为了 问题答案: 好吧,根据您给的小提琴,我尝试了这些,对我有用 我没有使用where条件

  • Erlang提供case语句,可用于根据case语句的输出执行表达式。 本声明的一般形式是 - 语法 (Syntax) case expression of value1 -> statement#1; value2 -> statement#2; valueN -> statement#N end. 本声明的一般工作如下 - 要评估的表达式放在case语句中。 这通常会评估为