2014-06-19 41 views
0

我有一個表包含用戶ID和部門。用戶標識符可以屬於多個部門,所以他們的組合使其唯一。查找重複的ID與不同的字段

但是我一直在試圖查詢試圖找到UserID屬於兩個部門之一(小時或客戶)。

SELECT UserId, Dept, COUNT(*) Total 
FROM MyTable 
GROUP BY UserID 
HAVING COUNT(*) = 1 

然而,這仍然帶回重複,如果一個用戶ID具有兩個部門我猜是因爲組合,其獨特的記錄。

我得到的回覆是這樣

 
UserID | Department  | Total 
1   hr    1 
2   customer  1 
3   customer  1 
1   customer  1 
3   hr    1

但是我試圖找回這是

UserID | Department  | Total 
2   customer  1

凡屬於兩個部門用戶ID的任何情況下,只有當他們屬於不包括在內到一個或另一個。

+0

你希望客戶1或3是什麼? –

+1

該查詢無效,並應該產生一個錯誤,因爲部門既不在'GROUP BY'定義也不分組 – Serpiton

回答

0

我不認爲上面的查詢會運行,因爲部門不在group by子句中,並且計數comparsion不能以這種方式。
來到您的問題:

Select userid, Dept 
from #temp 
where userid in (Select userid from (Select userid,count(*) 'C' 
from #temp group by userid) u where u.c=1) 

我不認爲你需要計算,因爲它始終是1

0

嘗試

SELECT UserId, COUNT(distinct Dept) Total 
FROM MyTable 
GROUP BY UserID 
HAVING COUNT(distinct Dept) = 1 
+1

也許提供一些解釋爲您的答案將幫助OP很大 – Huangism

0

你可以嘗試這樣的

select UserId, Dept 
FROM Mytable where UserId in 
(
    SELECT UserId, COUNT(*) Total 
    FROM MyTable 
    GROUP BY UserID 
    HAVING COUNT(*) = 1 
) 
東西

如果您在組中添加Dept列你會一直檢索所有的組合。 所以,你必須選擇所有用戶只用一個部門,然後檢索附加信息

有可能的語法錯誤,因爲我通常與Oracle工作,但我認爲這個概念是正確的

0

這將選擇用戶'hr'在'customer'中沒有id,然後在'customer'中沒有'hr'中的id。
我沒有計入目的,因爲它始終只能是一個。

SELECT * FROM [MyTable] T WHERE Department = 'hr' AND NOT EXISTS (SELECT 1 FROM [MyTable] WHERE [MyTable].UserID =T.UserID AND Department = 'customer') UNION 
SELECT * FROM [MyTable] T WHERE Department = 'customer' AND NOT EXISTS (SELECT 1 FROM [MyTable] WHERE [MyTable].UserID =T.UserID AND Department = 'hr') 
1

這應該做的工作

select t1.UserId, Dept, t2.Total 
FROM MyTable t1 
INNER JOIN 
(
    SELECT UserId, COUNT(*) Total 
    FROM Table1 
    GROUP BY UserID 
    HAVING COUNT(*) = 1 
) t2 on t1.UserId = t2.UserId 
+0

是的,這是一個伎倆。我也看到我錯過了它。謝謝 – dmcs14db

0

問題是COUNT (*)末。

試試這個:

SELECT UserId, Dept, COUNT(*) Total 
FROM MyTable 
GROUP BY UserID 
HAVING COUNT(UserId) = 1 
0

這是一個假問題,因爲你不能在此查詢使用部門。 我不明白爲什麼作者沒有向我們解釋任何編譯器警告,並告訴我們這個查詢的一些結果。

,但如果你真的想要得到一些結果可以YSE這樣:

SELECT UserId, min(Dept) as Dept 
FROM MyTable 
GROUP BY UserID 
HAVING COUNT(*) = 1