【问题标题】:Trying to update with a case scenario尝试使用案例场景进行更新
【发布时间】:2018-11-12 15:28:12
【问题描述】:

我正在尝试使用案例使用 SQL 进行更新。如果该字段有数字,我的目标是用 field1 更新表格中的 field3。但如果它没有数字,那么我想用 field2 更新 field3。当我使用我的代码时,出现以下错误。

Msg 116, Level 16, State 1, Line 11。只能有一个表达式 未引入子查询时在选择列表中指定 存在。

这是我的代码:

Update [dbo].[oracle_reconciliation_report$]
SET [Forecast] =
    (
      Select [Forecast],
           [ProposedApprovedCapitalExpenditureForecast ],
           [ProposedCIP CapitalExpenditureForecast],
      case when [ProposedApprovedCapitalExpenditureForecast ] > 0 
         then [ProposedApprovedCapitalExpenditureForecast ]
      else [ProposedCIP CapitalExpenditureForecast] 
      end
    )
From [dbo].[oracle_reconciliation_report$]

如果该字段有数字,我正在尝试用 field1 更新表格中的 field3,但如果它没有数字,那么我想用 field2 更新 field3

【问题讨论】:

  • 在您的问题中,请为您正在使用的数据库引擎添加标签
  • 您的子查询中有 3 列,但正试图将其分配给一列。那是行不通的。如果您在查询中引用了实际的列名,而不是描述中的“field1”、“field2”、“field3”,则可能会通过符合您要求的查询为您提供答案。
  • 当您使用 SQL 标签时,会向您显示一条大消息,建议您还为正在使用的特定 DBMS 添加标签,因为它们之间的功能和语法各不相同。你为什么忽略这个建议?您只是让您花费更长的时间来获得答案,并且可能会浪费那些继续尝试提供帮助的人的时间,只是为了发现它对您的 DBMS 不起作用。当本网站(或网站上的某人)向您提供建议时,接受它符合您的最大利益。
  • 内部选择必须是“标量子查询”。这意味着它必须返回一个 SINGLE 值,而不是 FOUR。

标签: sql sql-server


【解决方案1】:

根据你的逻辑,我希望这样的逻辑:

Update [dbo].[oracle_reconciliation_report$]
    set Forecast = (case when [ProposedApprovedCapitalExpenditureForecast ] > 0 
                         then [ProposedApprovedCapitalExpenditureForecast ] > 0 
                         else [ProposedCIP CapitalExpenditureForecast]
                    end)
    From [dbo].[oracle_reconciliation_report$];

也许这会解决你的问题。

【讨论】:

  • 感谢工作,为没有正确标记的每个人道歉。我可能太新而无法发布,因为当我意识到自己标记错误或至少更新了标签时,我试图删除问题,但我无法弄清楚。感谢 Gordon Linoff 的帮助。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多