【问题标题】:Update data using SET / WHERE statements使用 SET / WHERE 语句更新数据
【发布时间】:2015-09-08 21:38:34
【问题描述】:

有没有办法使用 WHERE 语句更新这些记录?

UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier = '1.35', 
    HRBIQuery.PaySegmentMultiplier = '1.25', HRBIQuery.PaySegmentMultiplier = '1.15',
    HRBIQuery.PaySegmentMultiplier = '.90', HRBIQuery.PaySegmentMultiplier = '.60',
    HRBIQuery.PaySegmentMultiplier = '.40' 
WHERE (HRBIQuery.BasePayRangeSegment = 'Below segment 1' AND HRBIQuery.PayGroupCountryDesc = 'France',
    HRBIQuery.BasePayRangeSegment = 'S1' AND HRBIQuery.PayGroupCountryDesc = 'France',
    HRBIQuery.BasePayRangeSegment = 'S2' AND HRBIQuery.PayGroupCountryDesc = 'France',
    HRBIQuery.BasePayRangeSegment = 'S3' AND HRBIQuery.PayGroupCountryDesc = 'France',
    HRBIQuery.BasePayRangeSegment = 'S4' AND HRBIQuery.PayGroupCountryDesc = 'France',
    HRBIQuery.BasePayRangeSegment = 'S5' AND HRBIQuery.PayGroupCountryDesc = 'France');

谢谢!

【问题讨论】:

  • 那行不通。您将同一个字段设置为多个不同的值,而 where 子句是一个明确的语法错误。你的意思是你想用这 6 个不同的值更新 6 个不同的记录?
  • 正确,我想根据 6 个不同的条件更新 6 个不同的记录
  • 然后运行 ​​6 个单独的更新。单独测试/设置 6 个值会导致非常难看的更新。
  • 您可以使用嵌套的 iif 在一个查询中执行此操作,但它非常难看。您还可以在 where 中使用 IN 语句,而不是 5 个单独的 where 条件。您的第二个选项是创建一个自定义函数,将 BasePayRangeSegment 传递给该函数,然后它将根据简单的 case 语句返回适当的值。第三种选择是运行 6 个不同的查询。

标签: ms-access jet-sql


【解决方案1】:

这里有几个选项。
选项 1:在查询中使用 switch 语句。

UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier =
  switch(HRBIQuery.BasePayRangeSegment = 'Below segment 1',1.35,
  HRBIQuery.BasePayRangeSegment = 'Below segment 1',1.35,
  HRBIQuery.BasePayRangeSegment = 'S1',1.25,
  HRBIQuery.BasePayRangeSegment = 'S2',1.15,
  HRBIQuery.BasePayRangeSegment = 'S3',.90,
  HRBIQuery.BasePayRangeSegment = 'S4',.60,
  HRBIQuery.BasePayRangeSegment = 'S5',.40)

WHERE HRBIQuery.BasePayRangeSegment IN('Below segment 1','S1','S2','S3','S4','S5') 
  AND HRBIQuery.PayGroupCountryDesc = 'France'    

选项 2:使用嵌套 IIF 语句的一个查询。

UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier =
  IIF(HRBIQuery.PaySegmentMultiplier='Below segment 1',1.35,
  IIF(HRBIQuery.PaySegmentMultiplier='S1',1.25,
  IIF(HRBIQuery.PaySegmentMultiplier='S2',1.15,
  IIF(HRBIQuery.PaySegmentMultiplier='S3,.90,
  IIF(HRBIQuery.PaySegmentMultiplier='S4',.60,
  IIF(HRBIQuery.PaySegmentMultiplier='S1',.40))))))

WHERE HRBIQuery.BasePayRangeSegment IN('Below segment 1','S1','S2','S3','S4','S5') 
  AND HRBIQuery.PayGroupCountryDesc = 'France'

选项 3:使用 6 个不同的查询。我不会把所有六个都打出来。希望你能明白。

UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier = 1.35
WHERE HRBIQuery.BasePayRangeSegment  = 'Below segment 1'
  AND HRBIQuery.PayGroupCountryDesc = 'France'

选项 4:使用自定义函数。创建一个公共函数并在您的查询中调用它。

UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier = custom_function(HRBIQuery.BasePayRangeSegment)

WHERE HRBIQuery.BasePayRangeSegment IN('Below segment 1','S1','S2','S3','S4','S5') 
  AND HRBIQuery.PayGroupCountryDesc = 'France'

自定义函数应该类似于(抱歉有任何语法错误,但您应该明白):

public function custom_function(value)
  dim return_value as double 
  select case value
     case 'Below segment 1'
       return_value = 1.35
     case 's1'
       return_value = 1.25
     case 'S2'
       return_value = 1.15
     case 'S3'
       return_value = .90
     case 'S4'
       return_value = .60
     case 'S5'
       return_value = .40
  End select
  return return_value
end function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多