职责分离搜索

时间:2015-03-31 20:56:23

标签: sql ms-access

我试图编写一个SQL语句,用于搜索表以查明问题的职责分离。在我的表中有一个用户列和一个责任列。我想拉出所有有两个明确职责的用户。这就是我的尝试,但它不起作用:

SELECT Users.[User], Users.[Responsibility]
  FROM Users
 WHERE Users.[Responsibility]="Example A"
   And Users.[Responsibility]="Example B";

有什么建议吗?我认为它不起作用,因为它不是基于用户的责任,但我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

以下查询将返回 'Example A''Example B'Responsibility的所有用户的列表:

SELECT Users.[User]
FROM Users
GROUP BY [User]
HAVING COUNT(CASE WHEN [Responsibility]='Example A' THEN 1 END) >= 1 AND
       COUNT(CASE WHEN [Responsibility]='Example B' THEN 1 END) >= 1

SQL Fiddle Demo here

如果您希望让所有用户至少承担两种不同的责任(无论哪种),请将HAVING子句替换为:

HAVING COUNT(DISTINCT [Responsibility]) >= 2

修改

对MS-Access使用以下查询:

SELECT User
FROM Users
GROUP BY User
HAVING  SUM(IIF(Responsibility = "Example A", 1, 0)) >=1 
        AND  SUM(IIF(Responsibility = "Example B", 1, 0)) >= 1

答案 1 :(得分:0)

查询实际上非常简单:

select  u.User
from    Users u
where   u.Responsibility in( 'Example A', 'Example B' )
group by u.User
having count(*) > 1;

您的尝试无法正常运行,因为对于同时具有“示例A”“示例B”的用户,没有任何行。因此,您必须检查“示例A”或“示例B”,然后计算结果。

当然,这假定同一个用户不会多次列出相同的责任。