职责分离搜索

Segregation of Duties search

我正在尝试编写一个 SQL 语句来搜索 table 问题的职责分离。在我的 table 中有一个用户栏和一个责任栏。我想拉所有有两个明确职责的用户。这是我正在尝试的方法,但它不起作用:

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

有什么建议吗?我认为它不起作用,因为它没有将责任建立在用户身上,但我不确定如何解决这个问题。

以下查询将return所有用户的列表'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

查询其实很简单:

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

您的尝试没有成功,因为没有一行同时具有 'Example A' 'Example B' 的用户。所以你必须检查 'Example A' 或 'Example B' 然后计算结果。

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