2012-03-12 36 views
1
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 

这是我的表structure.I想找出emp_id & dept_id其薪水比其组平均薪水高。我已经尝试了SQL查询,但正显示出没有错误味精难以错误查询返回多个错误在SQL Server 2008

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

欢迎StackOverflow上:如果您发布的代码,XML或数据样本,** **请那些突出线条在文本编辑器中单击编辑器工具栏上的“代码示例”按钮(“{}”),以良好地格式化和语法突出显示它! – 2012-03-12 07:13:42

+0

和**你得到了什么错误?!?我们无法看到您的屏幕,也无法阅读您的想法 - 请**发布您获得的完整且准确的错误消息! – 2012-03-12 07:14:50

回答

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 
0

,但有一点我可以告诉你:你的第二个选择中,AVG通过,因此它可以返回多个值进行分组,因此>是不是有效的运营商。

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

也许是这样的:

;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