SQL Server聚合函数-如何执行?

SQL Server聚合函数-如何执行?,sql,sql-server,oracle11g,aggregate-functions,Sql,Sql Server,Oracle11g,Aggregate Functions,输入表包含两列,即名称和部门 +------+------+ | name | dept | +------+------+ | A | 123 | | B | 456 | | A | 789 | | C | 123 | | A | 456 | | B | 789 | +------+------+ 输出为 name ----- A 所以这里A在三个部门工作(123456789)。如何检索在所有3个部门工作的人员姓名?尝试以下操作: SELEC

输入表包含两列,即名称和部门

+------+------+
| name | dept |
+------+------+
| A    |  123 |
| B    |  456 |
| A    |  789 |
| C    |  123 |
| A    |  456 |
| B    |  789 |
+------+------+
输出为

name
-----
A
所以这里A在三个部门工作(123456789)。如何检索在所有3个部门工作的人员姓名?

尝试以下操作:

SELECT NAME
FROM TABLE1
GROUP BY NAME
HAVING COUNT(DISTINCT DEPT)=(SELECT COUNT(DISTINCT DEPT) FROM TABLE1 )
这可能对你有帮助

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

这里有一个使用
窗口函数的选项

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

谢谢sagar,但是如果我们不知道有多少部门,我们想检索在所有部门工作的人员的姓名。@AjitKumar如果对您有效,请选择答案。是什么定义了
all
?是否有另一张表格用于
部门
?或者您只是想让
名称
与最高计数关联吗?这里没有唯一的表,我只想检索在所有部门工作的名称。这里显示了一个错误,即OVER子句不允许使用DISTINCT。@AjitKumar--我以为oracle 11支持这一点,但我可能弄错了。。。