我有一张桌子,我们称之为用户。
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)。不知道该怎么办?
答案 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中不可用。
答案 3 :(得分:1)
您可以为美国创建一个表到USER,MO到MODERATOR等映射,并在连接中使用它。
比硬编码更容易维护,扩展(即不同的语言),缺点是需要维护映射表。
答案 4 :(得分:0)
我同意您应该有一个表格 - 在SQL语句中存储数据的任何其他内容。
为了完整性,让我提一下Switch()和Choose()。前者采用任意数量的值对,后者采用索引和值列表。前者适用于字符串或数字,与CASE WHEN一样,而Choose()仅适用于数字。
两者都具有有限的实用性,因为它们的使用相当于在SQL中存储查找表,但是对于添加查找表根本不可行的情况,了解这些事情是很好的。