查询在sql server 2008中返回多个错误

时间:2012-03-12 07:12:14

标签: sql sql-server-2008 syntax-error

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 个答案:

答案 0 :(得分:2)

试试这个,

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 :(得分:1)

也许是这样的:

;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

答案 2 :(得分:0)

没有错误消息很难,但有一件事我可以告诉你:你的第二个选择,AVG被分组,所以它可以返回多个值,所以>不是有效的运营商。

答案 3 :(得分:0)

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