我试图编写一个SQL语句,用于搜索表以查明问题的职责分离。在我的表中有一个用户列和一个责任列。我想拉出所有有两个明确职责的用户。这就是我的尝试,但它不起作用:
SELECT Users.[User], Users.[Responsibility]
FROM Users
WHERE Users.[Responsibility]="Example A"
And Users.[Responsibility]="Example B";
有什么建议吗?我认为它不起作用,因为它不是基于用户的责任,但我不确定如何解决这个问题。
答案 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
如果您希望让所有用户至少承担两种不同的责任(无论哪种),请将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”,然后计算结果。
当然,这假定同一个用户不会多次列出相同的责任。