2012-03-12 53 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