2016-11-27 4 views
0

Hier meine SQL (Oracle) Code:SQL Join Statement + COUNT funktioniert nicht

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 

ist ein Fehler:

ORA-00979: kein GROUP BY-Ausdruck

Ohne Gruppe Positionspapier Tabelle sieht wie folgt aus:

enter image description here

ich möchte Nummer o zählen f Freiwillige für jede Aufgabe und Gruppe nach task_id, aber nach stundenlangen Versuchen gab ich auf

+0

Warum wählen Sie 'pr.Projektname'? –

+0

Per Definition muss alles, was nicht in der Gruppe von IN YOUR SELECT STATEMENT enthalten ist, entweder in einer Distinct-Klausel oder einer Aggregatfunktion sein. Da Sie nach der Task-ID gruppieren, wie ordnen Sie die anderen Spalten zu? –

+0

Möchten Sie Freiwillige nach task_id oder nach task_id UND Datum abzählen? Wenn nur durch task_id, dann gibt es keine Möglichkeit, etwas, das mit "date" im Ergebnis zu tun hat, sinnvoll einzubeziehen. (Möchten Sie das erste und das letzte Datum für diese Task-ID anzeigen? DAS kann getan werden.) Anders als das: Angenommen, jede Task-ID gehört nur zu einem Aktivitäts_desc und nur einem Projekt_Name (sonst nicht wieder, was Sie versuchen zu tun) Sinnvoll), - Wenn also jede Task_ID nur zu einem activity_desc und project_name gehört, füge activity_desc und project_name zur GROUP BY-Klausel hinzu. – mathguy

Antwort

1

Sie müssen nach allen nicht aggregierten Werten gruppieren. Beginne mit etwas Kleinem und baue z.B.

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

Sie sicher, dass Sie eine Zählung pro Aktivität zurückgibt, und dann andere Attribute langsam hinzufügen, zum Beispiel sowohl für die SELECT und GROUP BY-Sektionen

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