2017-08-17 57 views
0

我试图确定一列中有多少个唯一值可以按另一列中的值分组。SQL:为另一列选择不同的值

有我的表的列,但我感兴趣的的是:“部门”和“用户”

数据是如何,对于这两列,有重复的用户使用相同的部。

例如,

Department User 

Insights  Mike 

Insights  Mike 

Insights  Chris 

Market  Julie 

Research  Will 

Research  Sabrina 

Research  Bryan 

我想是这样的:

Department DistinctUsers 

Insights  2 

Market   1 

Research  3 

我基本的SQL知识告诉我,这是代码的结构:

SELECT department, COUNT(DISTINCT user) 
FROM Sheet1 
GROUP BY department, user 

我看到人们将实施(SELECT DISTINCT User from Sheet1)FROM子句,但我hav e未能将其整合到代码中。

任何建议或提示,非常感谢!

谢谢!

+1

从你的解释,你的查询应该工作。但是样本数据和预期输出是必需的。您对样本数据的尝试不清楚。 – scsimon

+0

我的错误似乎与“COUNT(不同用户)”一起出现。基本上我正在寻找将部门分组并计算每个部门中的唯一用户 - 希望能够清除它 – wra

+0

那么,这正是查询所要做的。只需从'group by'中删除'user'即可。还有mysql <> sql server。选择一个标签。此外,这与ms-access有什么关系? – scsimon

回答

4

正如在评论中提到,你只需要选自以删除用户。

SELECT 
    department, 
    COUNT(DISTINCT [user]) as CT 
FROM Sheet1 
GROUP BY department 

ACCESS

SELECT 
    department, 
    count([user]) 
FROM 
    (SELECT DISTINCT department, [user] from Sheet1) as x 
GROUP BY 
    department 
+0

它正确..它会给予预期的结果 –

+0

有没有一种方法可以使它适应Microsoft Access以及它? – wra

+0

当然@wra查看编辑。 – scsimon

1

您的代码将做的工作,但没有必要组由用户

+0

这是不正确的,并且将显示“Insights”部门的3个用户,而不是预期的2 – yanman1234

+0

,这是不正确的,因为他们需要不同的用户。 – scsimon

+0

我修改了我的答案,然后:) – Cloud

0
BEGIN TRAN 

CREATE TABLE #TMP (Department NVARCHAR(50),Name NVARCHAR(50)) 

INSERT INTO #TMP 
SELECT 'Insights', 'Mike' UNION ALL 

SELECT 'Insights','Mike' UNION ALL 

SELECT 'Insights','Chris'UNION ALL 

SELECT 'Market' ,'Julie' UNION ALL 

SELECT 'Research', 'Will'UNION ALL 

SELECT 'Research', 'Sabrina'UNION ALL 

SELECT 'Research','Bryan' 

SELECT * FROM #TMP 

SELECT department, COUNT(DISTINCT NAME) 
FROM #TMP 
GROUP BY department 

ROLLBACK TRAN 
相关问题