【解決方法】手順が機能していませんか?


SQL データベースがあり、ユーザーから部門 ID を取得し、給与が平均以下の従業員の給与を更新する手順を作成する必要があります。

エラー:

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

私が試したこと:

CREATE PROCEDURE RAISE_SALARY(
@P_DEPARTMENT_ID NUMERIC
) 
AS
BEGIN
UPDATE EMP_DETAILS 
SET SALARY = SALARY + SALARY * 0.25 
WHERE SALARY < AVG(SALARY)
AND DEPARTMENT_ID = @P_DEPARTMENT_ID;
END

解決策 1

質問へのすべてのコメントも参照してください…
…そして、私は mssql 構文にあまり慣れていないので、注意してください。したがって、いくつかのセミコロンが間違っている可能性があります。

とにかく、これはあなたが必要とすることをするはずです:

CREATE PROCEDURE RAISE_SALARY(@P_DEPARTMENT_ID NUMERIC) 
AS
BEGIN
	DECLARE @AVG_SALARY INT
    /* Determine the average salary for the specific department  '@P_DEPARTMENT_ID' */
	SELECT @AVG_SALARY = AVG(SALARY) 
				FROM EMP_DETAILS 
				WHERE DEPARTMENT_ID = @P_DEPARTMENT_ID

	/* Update the salaries for that department for salaries below the average */
	UPDATE EMP_DETAILS 
		SET SALARY = SALARY + SALARY * 0.25 
	WHERE SALARY <  @AVG_SALARY
	  AND DEPARTMENT_ID = @P_DEPARTMENT_ID
END

お役に立てば幸いです。

コメント

タイトルとURLをコピーしました