Ms access 使用SET/WHERE语句更新数据
有没有办法使用WHERE语句更新这些记录Ms access 使用SET/WHERE语句更新数据,ms-access,jet-sql,Ms Access,Jet Sql,有没有办法使用WHERE语句更新这些记录 UPDATE HRBIQuery SET HRBIQuery.PaySegmentMultiplier = '1.35', HRBIQuery.PaySegmentMultiplier = '1.25', HRBIQuery.PaySegmentMultiplier = '1.15', HRBIQuery.PaySegmentMultiplier = '.90', HRBIQuery.PaySegmentMultiplier = '.6
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');
谢谢 这里有几个选项。
选项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'
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'
选项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 =
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'
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'
自定义函数应该是这样的(很抱歉出现语法错误,但您应该知道):
那是行不通的。您将同一字段设置为多个不同的值,而where子句是一个明显的语法错误。你的意思是你想用这6个不同的值更新6个不同的记录?正确,我想根据6个不同的条件更新6个不同的记录,然后运行6个单独的更新。单独测试/设置这6个值会导致非常糟糕的更新。你可以使用嵌套的iif在一个查询中完成它,但这非常糟糕。您还可以在where中使用IN语句,而不是5个单独的where条件。第二个选项是创建一个自定义函数,将BasePayRangeSegment传递给它,然后它将根据一个简单的case语句返回相应的值。第三种选择是运行6个不同的查询。