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))))))));
  • 如果不满足任何条件,false条件是否返回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';