2016-09-21 171 views
-1

輸入表包含2列,即名稱和deptSQL Server聚合函數 - 如何?

+------+------+ 
| name | dept | 
+------+------+ 
| A | 123 | 
| B | 456 | 
| A | 789 | 
| C | 123 | 
| A | 456 | 
| B | 789 | 
+------+------+ 

輸出是

name 
----- 
A 

所以這裏A是在3個科指南(123,456,789)的工作。如何檢索在所有3個部門工作的姓名?

+0

什麼定義'all'?是否有另一個'部門'表?或者你只是想要與最高計數相關的「名稱」? – sgeddes

+0

不僅僅有單桌,只是我想檢索在所有部門工作的姓名 –

回答

-1

試試這個:

SELECT NAME 
FROM TABLE1 
GROUP BY NAME 
HAVING COUNT(DISTINCT DEPT)=(SELECT COUNT(DISTINCT DEPT) FROM TABLE1) 
+0

感謝薩加爾,但如果我們不知道有多少部門在那裏,我們想要檢索在所有部門工作的姓名。 –

+0

查看更新查詢 –

+0

謝謝..其工作 –

0

這可以幫助你。

SELECT NAME 
FROM TABLE1 
GROUP BY NAME 
HAVING COUNT(DISTINCT DEPT) = 
          (
           SELECT COUNT(DISTINCT DEPT) 
           FROM TABLE1 
          ) 
0

下面是一個使用window function一個選項:

select name 
from (
    select name, count(distinct dept) cnt, 
      count(distinct dept) over() overallcnt 
    from yourtable 
    group by name 
) t 
where cnt = overallcnt 
+0

它顯示錯誤,即OVER子句不允許使用DISTINCT。 –

+0

@AjitKumar - 我認爲這在oracle 11中得到了支持,但我可能被誤認爲... – sgeddes