如何在Access查询中更改结果?

时间:2010-12-20 20:20:37

标签: sql ms-access

我有一张桌子,我们称之为用户。

id username type

类型字段是双字符类型,因此每个用户都有US,MO,AD。不确定为什么原始开发人员会这样做,但不幸的是我无法改变这种方法。

1 mike US
2 Tim AD
3 mark MO

我不想在Access中返回US,AD ...等类型,而是想用USER替换US,用MOERATOR替换MO,并用ADMIN替换AD。

这可能吗?

有点像SELECT * FROM USERS,然后是Access中的if语句(如果是US,那么USER)。不知道该怎么办?

5 个答案:

答案 0 :(得分:2)

当然可以!尝试这些方面的东西: 选择[id],[用户名], iif([type] =“US”,“User”,   iif([type] =“MO”,“主持人”,     iif([type] =“AD”,“Admin”,“Unknown Type”   ) )

(这是IIf功能的链接)

但是,考虑到所有事情,您可能希望使用查找表来规范化数据。因此,例如,创建一个名为“UserType”的第二个表,其中包含两列:[Code]和[Name]。然后用三个记录填充它: “美国”,“用户” “MO”,“主持人” “AD”,“管理员”

然后,在查询设计器中,包括两个表并通过将源表中的“类型”列拖动到[UserType]表上的“[Code]”列来连接它们。然后,从第一个表中选择[id]和[username]列,从查找表中选择[name]列。这样,如果您需要添加新的用户类型,则无需担心返回并修改所有查询。

答案 1 :(得分:2)

如果您有另一个名为用户类型的表,看起来像这样

UserType (typeid, description) 
US  USER 
AD  ADMIN 
MO  MODERATOR

这将是微不足道的

 SELECT users.id, users.username, UserType.description as type
 FROM 
    USERS 
    INNER JOIN UserType
    ON USERS.Type = UserType.TypeID;

您也可以使用VBA函数或嵌套IIF

您还可以将查找显示控件更改为组合框并将行源类型设置为值列表

答案 2 :(得分:1)

Sql Server有一个名为Case When的构造,但它在MS Access中不可用。

这是workaround

答案 3 :(得分:1)

您可以为美国创建一个表到USER,MO到MODERATOR等映射,并在连接中使用它。
比硬编码更容易维护,扩展(即不同的语言),缺点是需要维护映射表。

答案 4 :(得分:0)

我同意您应该有一个表格 - 在SQL语句中存储数据的任何其他内容。

为了完整性,让我提一下Switch()和Choose()。前者采用任意数量的值对,后者采用索引和值列表。前者适用于字符串或数字,与CASE WHEN一样,而Choose()仅适用于数字。

两者都具有有限的实用性,因为它们的使用相当于在SQL中存储查找表,但是对于添加查找表根本不可行的情况,了解这些事情是很好的。