2017-06-22 51 views
-1
 DECLARE 

    v_department_name VARCHAR(50); 
    v_department_manager VARCHAR(50); 
    v_totalsalary NUMBER(5); 

    BEGIN 

    SELECT departments.department_name, concat(employees.first_name, employees.last_name), sum(employees.salary) 
    INTO v_department_name, v_department_manager, v_totalsalary 
    FROM employees LEFT JOIN departments ON employees.department_id =departments.department_id WHERE departments.department_id = 100; 

    DBMS_OUTPUT.PUT_LINE ('Department Name is: ' || v_department_name || 'And Department Manager is: ' || v_department_manager || 'Total Amount of Salary is: ' || v_totalsalary); 

    END; 

當試圖以顯示部門名稱,部門經理(名字,姓氏),並通過 員工的部門ID 100賺工資的總量,我得到這個:加入SQL查詢提供了ORA-00937錯誤

ORA-00937:不是單組分組函數

是什麼原因造成的錯誤?

表的員工(僱員標識,名字,姓氏,部門標識,經理標識,薪水)

表部門(部門標識,部門名稱,經理標識,LOCATION_ID)

+3

不要讓我們陷入懸念!什麼是錯誤!? –

+0

ORA-00937錯誤:不是單組功能 – kago

+0

其他人發佈了另一個關於同一作業分配的問題(在代碼中有不同的錯誤)。我解釋瞭如何解決這個問題。 https://stackoverflow.com/questions/44709714/pl-sql-sql-statement-ignored-and-missing-right-parenthesis/44709768?noredirect=1#comment76404070_44709768 – mathguy

回答

0

ORA-00937:簡單的說,你需要GROUP BY條款,並在該條款重複SELECT子句中的每一列,不使用聚合函數,如SUM/MIN/MAX等

 
    SELECT 
     departments.department_name 
    , LISTAGG (employees.first_name || employees.last_name, '; ') 
      WITHIN GROUP (ORDER BY employees.last_name,employees.last_name) employee_names 
    , SUM(employees.salary) 
    FROM employees 
    INNER JOIN departments ON employees.department_id = departments.department_id 
    WHERE departments.department_id = 100 
    GROUP BY 
     departments.department_name 
    ; 

注意我用的LISTAGG(),但你不必使用它。如果您的3列需要部門,部門經理和(工資總額),那麼您需要從部門經理的部門表中選擇正確的字段,然後在select和group by子句中包含該列。

0
WITH temp AS (
    SELECT d.department_name, concat(e.first_name, e.last_name) AS emp_name, 
     sum(e.salary) AS salary_sum 
    FROM employees e LEFT JOIN departments d ON e.department_id =d.department_id 
    WHERE d.department_id = 100 
    GROUP BY d.department_name, concat(e.first_name, e.last_name) ) 
SELECT t.department_name, t.emp_name, t.salary_sum 
INTO v_department_name, v_department_manager, v_totalsalary 
FROM temp 

此查詢使用公共表格表達式將數據分組在一起以保持一切更一致。您正在收到錯誤,因爲您在原始查詢中缺少GROUP BY d.department_name, concat(e.first_name, e.last_name)行。 SUM()是一個聚合函數,只能與GROUP BY一起使用。