Запрос возврата нескольких ошибок в SQL Server 2008 - PullRequest
1 голос
/ 12 марта 2012
Emp_id  Emp_Name    Dept_ID Dept_Name salary
1   a   AA  IT  2000       100
2   b   AA  IT  3000       200
3   c   AA  IT  4000       300
4   d   BB  HR  1000       400
5   e   BB  HR  2000       500
6   f   BB  HR  3000       600
7   g   BB  HR  4000       700
8   h   CC  FI  2500       800
9   i   CC  FI  3500       900

Это моя структура таблицы. Я хочу выяснить emp_id & dept_id, чья зарплата больше, чем средняя зарплата в его группе. Я пробовал SQL-запрос, но показывает ошибку

select Emp_id 
from dbo.Sheet1$ 
where Salary >= (select AVG(Salary) from dbo.Sheet1$ group by Dept_ID)

Ответы [ 4 ]

2 голосов
/ 12 марта 2012

Попробуйте,

SELECT Emp_id 
FROM dbo.Sheet1$ A
where A.Salary >= (SELECT AVG(B.Salary) FROM dbo.Sheet1$ B WHERE B.Dept_ID=A.Dept_ID)
1 голос
/ 12 марта 2012

Может быть, что-то вроде этого:

;WITH CTE
AS
(
  SELECT
      tbl.Emp_id,
      AVG(salary) OVER(PARTITION BY tbl.Dept_ID) AS avgSalery
  FROM
      dbo.Sheet1$ AS tbl
)
SELECT
    *
FROM
    dbo.Sheet1$ AS tbl
    JOIN CTE
        ON CTE.Emp_id=tbl.Emp_id
        AND tbl.salary>=CTE.avgSalery
0 голосов
/ 12 марта 2012
select Emp_id,Dept_ID from (
  select Emp_id, Emp_Name, 
  avg(salary) over (partition by dept_id) avg_sal 
  from yourtable
) a
where salary > avg_sal
0 голосов
/ 12 марта 2012

Без сообщения об ошибке сложно, но я могу сказать вам одну вещь: ваш второй выбор, AVG сгруппирован, чтобы он мог возвращать несколько значений, поэтому> не является допустимым оператором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...