Sql 基于两个条件更新列数据的有用方法有哪些?
我对以下代码有两个问题:Sql 基于两个条件更新列数据的有用方法有哪些?,sql,ms-access,Sql,Ms Access,我对以下代码有两个问题: UPDATE HRBI SET HRBI.PayGroupRegionCode = IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Japan JPN', 'APJ', IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Taiwan TWN', 'APJ', IIF(HRBI.P
UPDATE HRBI SET HRBI.PayGroupRegionCode = IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Japan JPN', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Taiwan TWN', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'China CNA', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Australia AUS', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Singapore SGP', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Thailand THA', 'APJ',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Luxembourg LUX','EMEA',
IIF(HRBI.PayGroupRegionCode = 'UNK' AND HRBI.CompensationGradeProfile = 'Romania ROU', 'EMEA',HRBI.PayGroupRegionCode))))))));
IIf
表达式代替。还可以使用()中的模式CompensationGradeProfile
更新HRBI
设置HRBI.PayGroupRegionCode=
转换
(
HRBI.CompensationGrade中的配置文件
(
"日本JPN",,
"台湾TWN",,
“中国CNA”,
“澳大利亚”,
“新加坡SGP”,
‘泰国’
)“APJ”,
HRBI.CompensationGrade中的配置文件
(
‘卢森堡卢森堡’,
“罗马尼亚鲁”
)“欧洲、中东和非洲”,
对,HRBI.PayGroupRegionCode
)
其中HRBI.PayGroupRegionCode='UNK';
既然您正在检查PayGroupRegionCode
中的值是否为固定值(“UNK”
),那么您可以将其移动到查询的WHERE
子句中
现在,让我们简化一下:
UPDATE HRBI
SET PayGroupRegionCode = IIF(CompensationGradeProfile = 'Japan JPN', 'APJ',
IIF(CompensationGradeProfile = 'Taiwan TWN', 'APJ',
IIF(CompensationGradeProfile = 'China CNA', 'APJ',
IIF(CompensationGradeProfile = 'Australia AUS', 'APJ',
IIF(CompensationGradeProfile = 'Singapore SGP', 'APJ',
IIF(CompensationGradeProfile = 'Thailand THA', 'APJ',
IIF(CompensationGradeProfile = 'Luxembourg LUX','EMEA',
IIF(CompensationGradeProfile = 'Romania ROU', 'EMEA', HRBI.PayGroupRegionCode))))))))
where PayGroupRegionCode = 'UNK';
现在,考虑到只更新两个值,我认为最简单的方法是使用两个不同的更新查询(更易于阅读和运行):
请注意,由于没有使用多个表,因此可以在查询的字段列表中使用表名
备选方案(未测试)
我上次使用Access已经有一段时间了,但也许你可以试试这个:
UPDATE HRBI
SET payGroupRegionCode = IIF(
CompensationGradeProfile IN ('Japan JPN', 'Taiwan TWN', 'China CNA',
'Australia AUS', 'Singapore SGP'),
'APJ',
IIF(
CompensationGradeProfile IN ('Luxembourg LUX','Romania ROU'),
'EMEA',
PayGroupRegionCode
)
)
WHERE PayGroupRegionCode = 'UNK';
这将使我更易于管理,有一个表填充城市,建立您的更新查询。是的,这是有意义的,我认为会工作得很好。哇!我不知道Access SQL方言支持
开关
!我也更喜欢双查询方法。更易于编写和维护。如果您需要它是原子的,您可以将这两条语句包装在一个事务中。@BaconBits我也喜欢这种方法(但我不知道Access是否支持事务)
UPDATE HRBI
SET payGroupRegionCode = IIF(
CompensationGradeProfile IN ('Japan JPN', 'Taiwan TWN', 'China CNA',
'Australia AUS', 'Singapore SGP'),
'APJ',
IIF(
CompensationGradeProfile IN ('Luxembourg LUX','Romania ROU'),
'EMEA',
PayGroupRegionCode
)
)
WHERE PayGroupRegionCode = 'UNK';