2015-03-31 92 views
0

我想寫一個SQL語句,將搜索表的職責分離的問題。在我的表中有一個用戶列和一個責任列。我想要吸引所有有兩個定義職責的用戶。這是我正在嘗試,但它不起作用:責任分離搜索

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

有什麼建議嗎?我認爲它不起作用,因爲它不是基於用戶的責任,但我不知道如何解決這個問題。

+1

它不工作含糊不清。你期望看到什麼?以及你的表中有哪些數據,有些例子會有所幫助 – btevfik 2015-03-31 21:08:25

+0

請問你能否在你的問題中包含表格定義?包括唯一約束等。 – 2015-03-31 21:11:04

+0

當有用戶擁有示例A和示例B時,它不會返回任何結果。我希望結果只是同時在查詢中定義職責的用戶。在表中,如果用戶有多個責任,列出的用戶不止一次。 – Daniel 2015-03-31 21:12:59

回答

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 
+0

我在查詢表達式'COUNT(CASE WHEN [Responsibility] =「示例A」THEN 1 END)> = 1 AND COUNT(CASE WHEN [Responsibility] =「Example B」)中出現錯誤,顯示爲「語法錯誤THEN 1 END)> = 1。' – Daniel 2015-03-31 21:26:46

+0

@Daniel您使用的是什麼RDBMS? – 2015-03-31 21:27:27

+0

它突出顯示第一個WHEN爲錯誤 – Daniel 2015-03-31 21:28:00

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'然後計算結果。

當然,這裏假定相同的責任不會被同一用戶多次列出。