如何将多个值传递给Access中的参数?
背景/总体目标
- 我有一个Excel电子表格,列出了某些angular色需要testing的项目。
- angular色有成员
- angular色可以有成员angular色,它们有自己的用户。
- 我需要获取可以testing给定function的用户总数,以获取某些指标的名称和计数。
- 我将用户,angular色和成员angular色放入Access数据库中进行快速查询
- 现在,只是试图获得正确的信息。 我不介意进入一个angular色列表,让它回吐这样的事情。
- 我想避免将每个angular色的所有testing项目都添加到数据库中(有很多这些testing项目应该是一个相当快的任务)。
数据库结构
+---------------+ +------------+ |RolesUsers | |Roles | |---------------| +---------------+ |+-----------| |ID | |Users | +-+|ID |+---+|RoleID | |---------------| | |RoleName | |UserID |+--+|ID | | +------------+ +---------------+ |UserName | | +---------------+ | | +-----------------+ | |RolesMemberRoles | | |-----------------| | |ID | +-+|RoleID | +-+|MemberRoleID | +-----------------+
目标
- 将angular色列表传递给查询(通过列出的参数或string列表)
- 返回属于这些angular色或其任何成员angular色的唯一用户的计数
- 快速和肮脏 – 不一定是幻想
当前访问查询
- 返回属于通过参数input的给定angular色的angular色或其成员angular色的用户
PARAMETERS p_RoleName Text ( 255 ); SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID In (Select ID from Roles where Roles.RoleName = p_RoleName) UNION SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID IN ( SELECT RolesSubroles.SubRoleID FROM RolesSubroles INNER JOIN Roles ON RolesSubRoles.RoleID = Roles.ID where Roles.RoleName = p_RoleName);
至今的想法
- find一个有趣的文章 ,介绍如何使用Instr()将一个文本string传递给where子句。 不知道如何我可以一定调整,但我的情况。
要实现目标1,可以使用Remou上面的build议,使用以下查询将RoleName列表键入到WHERE
子句中。 但是,删除“WHERE”子句,运行查询,然后粘贴到Excel中(目标3)“快速和肮脏”过滤可能更有意义。
SELECT DISTINCT Roles_1.RoleName, Users.UserName FROM Users INNER JOIN ((Roles INNER JOIN (RolesMemberRoles INNER JOIN Roles AS Roles_1 ON RolesMemberRoles.MemberRoleID = Roles_1.ID) ON Roles.ID = RolesMemberRoles.RoleID) INNER JOIN RoleUsers ON Roles.ID = RoleUsers.RoleID) ON Users.ID = RoleUsers.UserID WHERE Roles_1.RoleName In ( "Prez", "Veep", "Staffer" ) ORDER BY Roles_1.RoleName, Users.UserName;
要返回能够履行各种angular色(目标2)的用户数,您可以运行以下操作。
SELECT InheritedRoles.RoleName, Count(*) AS NumOfTestersAvailable FROM (SELECT DISTINCT Roles_1.RoleName, Users.UserName FROM Users INNER JOIN ((Roles INNER JOIN (RolesMemberRoles INNER JOIN Roles AS Roles_1 ON RolesMemberRoles.MemberRoleID = Roles_1.ID) ON Roles.ID = RolesMemberRoles.RoleID) INNER JOIN RoleUsers ON Roles.ID = RoleUsers.RoleID) ON Users.ID = RoleUsers.UserID) AS InheritedRoles GROUP BY InheritedRoles.RoleName ORDER BY InheritedRoles.RoleName;
上面的SQL假定每个Role都包含在RoleMemberRoles表中的成员身份。 您应该使用DISTINCT
因为数据模型不会阻止单个用户拥有多个angular色,因此在每个结果集中都会出现多次。
build议:在您的Access项目中,使用Access SQL查询电子表格数据,例如可能使用内衬表格在Access表格和Excel数据之间创buildJOIN
。