【问题标题】:How to map a string to a table column in MS Access?如何将字符串映射到 MS Access 中的表列?
【发布时间】:2016-05-12 18:33:21
【问题描述】:

我需要一个 SQL 查询来将 TableA 中的列的字符串内容映射到 TableB 中的一组列。它看起来像这样:

TableA
| ID | Status |
---------------
| 0  | "full" |
| 1  | "part" |
|    |        |

TableB
| ID | full | part |expire|
--------------------------
| 0  | true | false| false|
| 1  | false| true | false|
|    |      |      |      |

我正在使用 MS Access,目前这就是我所拥有的一切:

SELECT * FROM TableA INNER JOIN TableB ON TableA.ID = TableB.ID

根据 ID 正确匹配两个表。但是,我不知道从这里去哪里。假设将以下内容添加到 TableA:

{ID:2, Status:"Expire"}

如何将它从 TableA 映射到 TableB?理想情况下,这将在 1 个查询中完成。

提前非常感谢! :)

【问题讨论】:

  • 预期结果是什么?如果您与我们分享,最好分享。
  • 很难理解你想要什么..给我们一个期望输出的样本。
  • TableB 是查询 TableA 后所需输出的示例。我故意将第三行留空,以便再次运行查询会将 ID#2 添加到 TableB。

标签: sql ms-access mapping case string-matching


【解决方案1】:

对每一列使用IIf() 函数。

SELECT ID,
    IIf([Status]='full', True, False) AS [full],
    IIf([Status]='part', True, False) AS [part],
    IIf([Status]='expire', True, False) AS [expire]
FROM Table1

【讨论】:

  • 如何将其合并到 UPDATE SET 中?我可以只使用 SET 而不是 SELECT 吗?
  • SET [full] = IIf([Status]='full', True, False) 应该可以工作。
【解决方案2】:

你的问题不够清楚。

如果您想从 TableA 重新创建 TableB,请在查询中使用 IIf ( expr , truepart , falsepart ) 函数。 下面的示例(添加状态字段 - 您可以将其排除):

Select ID,Status, IIf([Status]="full", true, false) as full, IIf([Status]="part", true, false) as part,IIf([Status]="expire", true, false) as expire from TableA

如果您打算连接两个表,请使用 LEFT OUTER 连接,它将包括 TableA 中的所有行。在这种情况下,第 3 行的布尔标志将为空值,因为没有匹配的行。

SELECT TableA.ID,Status,full,part,expire FROM TableA LEFT JOIN TableB ON TableA.ID = TableB.ID

问候, 比克斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2020-10-11
    • 2011-06-06
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多