2016-11-27 150 views
0

这里是我的SQL(Oracle)的代码:SQL JOIN语句+ COUNT不起作用

SELECT a.Task_id, a.Activity_desc AS "ACTIVITY DESCRIPTION" , 
     a.Activity_date || ' (' || a.Activity_day || ')' AS "ACTIVITY DATE", 
     pr.Project_name, COUNT(a.Volunteer_id) 
FROM task_activity a 
JOIN task t 
ON a.Task_id = t.Task_id 
JOIN project pr 
ON t.Project_id = pr.Project_id 
GROUP BY a.Task_id 
ORDER BY Task_id 

错误:

ORA-00979:不是GROUP BY表达式

没有组statemen表看起来像这样:

enter image description here

我想算标记O ˚F志愿者为每个任务和group by TASK_ID,但尝试了几个小时之后,我放弃了)

+0

为什么选择'pr.Project_name'? –

+0

该组中定义任何不想在SELECT语句必须是在一个独特的条款,或聚合函数。既然你是由task_ID分组的,你如何分配其他列? –

+0

你想通过task_id或者task_id和日期来统计志愿者吗?如果只通过task_id,那么无法以任何有意义的方式在结果中包含与“日期”有关的任何内容。 (你要显示的第一个和该TASK_ID的最后日期可以做什么?)。除此之外:假设每TASK_ID只属于一个activity_desc只有一个PROJECT_NAME(否则你又正在做什么不意义), - 所以,如果每TASK_ID只属于一个activity_desc和PROJECT_NAME,加activity_desc和PROJECT_NAME到GROUP BY子句。 – mathguy

回答

1

您可以通过所有非聚合值需要组。从一些小事开始,并建立起来,例如

SELECT a.Activity_desc, COUNT(a.Volunteer_id) countVolunteer 
FROM task_activity a 
GROUP BY a.Activity_desc 

检查返回给每个活动的计数,然后慢慢地将其他属性添加到SELECT和GROUP BY部分,例如,

SELECT a.Activity_desc, t.Task_id, COUNT(a.Volunteer_id) countVolunteer 
FROM task_activity a 
JOIN task t 
ON a.Task_id = t.Task_id 
GROUP BY a.Activity_desc,t.Task_id