2014-10-31 71 views
-4

的高工資員工的工資我有這個表:選擇管理

CREATE TABLE EMP ( 
EmpNo INT IDENTITY(1,1) PRIMARY KEY, 
Ename NVARCHAR(350), 
JOB NVARCHAR(100), 
Mgr INT, HireDate DATETIME, 
Sal INT, 
Comm INT, 
DeptNo INT) 

我想選擇經理人的高薪員工的薪水。

這裏是我的代碼:

from a in EMPs 
where ((from b in EMPs where b.Mgr != null 
select b.Sal + (b.Comm != null ? b.Comm :0))) > (select c in EMPs where c.Mgr == null 
select b.Sal +(b.Comm != null ? b.Comm :0)) 
select a.Ename 

請!幫我。

+1

而你的問題是?它不起作用嗎?它會給出錯誤的答案嗎?一個錯誤? – Tim 2014-10-31 05:17:42

+1

請稍微清楚一點。請不要發佈一半的問題。這真的很糟糕。你只是來問一些沒有意義的事情,這是什麼用的。 – 2014-10-31 05:25:00

+0

哦!我的錯。這是行不通的。 – 2014-10-31 05:31:25

回答

2

我認爲你正在尋找所有那些在每個經理下都獲得最高工資的員工。如果是這樣的話,試試這個: -

var query = employees.GroupBy(x => x.ManagerName) 
           .Select(x => new { ManagerName = x.Key,EmployeeName = x.OrderByDescending(z => z.Salary + (z.Comm ?? 0)).First().EmpName }); 

步驟1:集團通過ManagerName 步驟2:選擇ManagerName(這將是分組後密鑰),各組取工資最高的員工按降序排列並選擇第一名員工。

在哪裏我已經使用這個類型: -

public class Employee 
    { 
     public int EmpID { get; set; } 
     public string EmpName { get; set; } 
     public string ManagerName { get; set; } 
     public decimal Salary { get; set; } 
     public int? Comm { get; set; } 
    } 

Fiddle

+0

這將是一個更好的答案,如果你解釋的代碼。 – Tim 2014-10-31 06:37:22

+0

@Tim - 正如我之前提到的代碼,我正在考慮OP需要所有那些薪水最高的員工以及在同一位經理下工作的員工。 – 2014-10-31 06:48:19

+0

當然,我明白了。我所說的是,對LINQ聲明的小解釋可以幫助那些遇到答案的人。 – Tim 2014-10-31 06:51:28