2016-11-27 75 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