【发布时间】:2011-11-30 15:47:27
【问题描述】:
背景/总体目标
- 我有一个 Excel 电子表格,其中列出了某些角色需要测试的项目。
- 角色有成员
- 角色可以有成员角色,成员角色有自己的用户。
- 我需要获取可以测试给定功能的用户总数,以获取名称并计算某些指标的数字。
- 我将用户、角色和成员角色放入 Access DB 以进行快速查询
- 现在,只是尝试获取正确的信息。我不介意输入角色列表并让它以这种方式吐出东西。
- 我想避免将每个角色的所有测试项添加到数据库中(其中有很多,这应该是一个相当快的任务)。
数据库结构
+---------------+
+------------+ |RolesUsers |
|Roles | |---------------| +---------------+
|+-----------| |ID | |Users |
+-+|ID |+---+|RoleID | |---------------|
| |RoleName | |UserID |+--+|ID |
| +------------+ +---------------+ |UserName |
| +---------------+
|
| +-----------------+
| |RolesMemberRoles |
| |-----------------|
| |ID |
+-+|RoleID |
+-+|MemberRoleID |
+-----------------+
目标
- 将角色列表传递给查询(通过列出的参数或字符串列表)
- 返回属于任何这些角色或其任何成员角色的唯一用户的计数
- 又快又脏——不必花哨
当前访问查询
- 为通过参数输入的给定角色返回属于某个角色或其成员角色的用户
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);
到目前为止的想法
- 找到an interesting post,了解如何使用 Instr() 将文本字符串传递到 where 子句。不过,我不确定如何根据自己的情况进行调整。
【问题讨论】:
-
哈,+1 花时间画出表格结构...非常好。
-
谢谢,Jeremy -- 表格由 asciiflow.com 提供 -- 我发现它对此类情况非常有帮助。
-
你知道你可以说
WHERE Field IN ("abc","def"),不是吗? -
您的标签列表不包括 Excel。
-
如果您将 Excel 工作表链接到 Access 数据库,您肯定可以这样做吗?
标签: sql excel ms-access parameters