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支持这一点,但我可能弄错了。。。