【问题标题】:Change value based on column根据列更改值
【发布时间】:2021-10-10 10:00:44
【问题描述】:

我有一个使用 MS Access 进行的类似这样的简单 SQL 查询:

SELECT DISTINCT MID(table1.OZ, 1, 8) as OZ, table1.column1, table1.Description, table1.PSet
FROM table1, table2
WHERE table2.OZ = table1.OZ AND 
table1.column1= table2.column1

表格如下所示:

OZ column1 Description Pset
01.02.03 some text description pset_LG
01.02.03 some text description pset_Text
01.02.03 some text description pset_ULG

OZ 由如下数字组成:xx.xx.xx 并且 Pset 始终具有三个可能的值:pset_LG、pset_Text 和 pset_ULG。现在回答我的问题:

我想根据 Pset 更改 OZ。如果我有 pset_LG,我想去掉最后四个数字,这样 OZ 将只显示 01。如果我有 pset_Text,我想提取第三和第四个数字 (02),对于 pset_ULG,我想提取 03,所以最后两个数字。是否可以更改我的初始 SQL 查询,以便调整表?我尝试在 MS Access 中使用UPDATE [table] 进行新查询,但我收到一条错误消息,指出该操作必须使用可更新查询。我通常似乎无法真正解决我的问题,所以我非常感谢各种帮助。

【问题讨论】:

  • 您问题中的查询与您的要求有什么关系?您要更新 table1 还是要 SELECT 查询?
  • 只要根据 Pset 过滤 OZ,一切都很好。 Gordon Linoff 的回答非常好! :)

标签: sql ms-access


【解决方案1】:

你可以使用条件逻辑:

SELECT DISTINCT MID(table1.OZ, 1, 8) as OZ,
       table1.column1, table1.Description,
       table1.PSet,
       IIF(table1.PSet LIKE "*LG", MID(table1.OZ, 1, 2),
           IIF(table1.PSet LIKE "*Text", MID(table1.OZ, 4, 2),
               IIF(table1.PSet LIKE "*ULG", MID(table1.OZ, 7, 2), table1.OZ
                  )
              )
           ) as new_OZ
               
FROM table1 INNER JOIN
     table2
     ON table2.OZ = table1.OZ AND table1.column1 = table2.column1

【讨论】:

    【解决方案2】:
    
    SELECT
       DISTINCT MID(table1.OZ, 1, 8) as OZ,
       table1.column1,
       table1.Description,
       table1.PSet,
       CASE
          WHEN PSet = 'pset_LG' THEN MID(OZ, 1, 2)
          WHEN PSet = 'pset_Text' THEN MID(OZ, 4, 2)
          ELSE MID(OZ, 7, 2)
       END as short_OZ
    
    FROM table1, table2
    WHERE table2.OZ = table1.OZ AND 
    table1.column1= table2.column1
    

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2021-09-05
    • 2022-07-28
    • 1970-01-01
    • 2019-01-18
    • 2022-11-30
    • 2012-12-22
    • 2022-08-09
    相关资源
    最近更新 更多