2014-10-31 1 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

+1

Пожалуйста, немного более ясно. Пожалуйста, не отправляйте половину вопроса. Это действительно плохо. вы просто приходите и спрашиваете бессмысленные вещи, каково использование этого. –

+0

О! моя вина. Это не работает. –

ответ

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 (который будет Key после группирования), из каждой группы выборки наиболее высокооплачиваемый работник путем упорядочивания в порядке убывания и выбора первого сотрудника.

Где я использовал этот тип: -

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

+0

@Tim. Как я уже упоминал перед кодом, я рассматриваю необходимость использования всех тех сотрудников, которые имеют самую высокую зарплату и которые работают под тем же менеджером. –

+0

Конечно, я понял. Я говорю о том, что небольшое объяснение заявления LINQ может помочь людям по дороге, которые сталкиваются с ответом. – Tim

Смежные вопросы