2013-04-01 59 views
0

给定一个表,看起来像这样:如何获取每个项目不同子项目的计数?

DATE USER   TYPE  DEPT 
3/1/13 Team1  Add   Finance 
3/1/13 Team1  Add   Collections 
3/2/13 Team1  Delete  Finance 
3/2/13 Team1  Delete  Finance 
3/2/13 Team1  Delete  Finance 
3/3/13 Team1  Delete  Collections 
3/3/13 Team1  Change  Finance 
3/3/13 Team1  Change  Finance 
3/4/13 Team1  Add   Finance 
3/5/13 Team1  Delete  Collections 

我怎样才能得到输出这样?

TYPE  DEPT  COUNT 
Add   Collections 1 
Add   Finance  2 
Change  Collections 0 (note: this line could be omitted if COUNT = 0) 
Change  Finance  2 
Delete  Collections 2 
Delete  Finance  3 

我需要指定USER = Team1和日期范围。我见到目前为止以下,但它不工作:

SELECT user, type, Count(*) AS Total 
FROM table1 
GROUP BY user, type 
HAVING (((user)="Team1")); 

这给了我:

USER TYPE Total 
Team1 Add  3 
Team1 Change 2 
Team1 Delete 5 

但不通过DEPT打破它,我不知道如何指定日期范围。

一如既往,谢谢!

编辑:我想我想通了:

SELECT User, Type, Dept, Count(*) AS Total 
FROM Table1 
WHERE (((Date) Between #3/1/2013# And #3/5/2013#)) 
GROUP BY User, Type, Dept 
HAVING (((User)="Team1")); 
+1

如果不是访问,我会说'选择类型,部门,COUNT(*)计数 FROM表1 WHERE 用户= 'TEAM1' 和日之间 '2012-01-01' AND '2013-12-31' GROUP BY type,dept;',但访问总是有一些惊喜存储:) –

+0

@JoachimIsaksson我在Google搜索过程中发现了类似的东西,但是Access不喜欢使用COUNT这种方式。给出语法错误。 –

回答

1

我想你可以试试这个。

SELECT Type, Dept, Count(*) AS Total 
FROM Table1 
WHERE (((Date) Between #3/1/2013# And #3/5/2013#)) 
AND (((User)="Team1")) 
GROUP BY Type, Dept 
+0

谢谢!这工作.. –

1

,你必须在TYPE和DEPT组,并把用户在where子句中:

select TYPE, DEPT, count(*) as TOTAL 
from table1 where USER = 'Team1' 
group by TYPE, DEPT 
having TOTAL > 0 
1

你必须与DEPT扩展GROUP BY列:

GROUP BY user, type, dept 

要满足日期范围条件,请添加WHERE部分:

WHERE date >= startDate AND date <= endDate 

要获得一个用户的数据只添加另一个WHERE条件:

WHERE user = "Team1" 

整个查询应该看起来像:

SELECT user, type, dept, Count(*) AS Total 
FROM table1 
WHERE date >= startDate AND date <= endDate AND user = "Team1" 
GROUP BY user, type, dept 

你不必做任何事情来去除行Total = 0 - 他们不会在那里,因为typedept的项目不在组源中。

+0

这工作..谢谢你详细解释! –

+0

居然,这没有按部门分组:(:) –

相关问题