2013-06-11 2 views
-2

Я пытаюсь найти всех сотрудников, у которых есть роль Role.Type = 2 и имеет более высокую плату.Цена, а затем сотрудник с Role.Type = 1 на том же месте (Роль. PlaceID).sql query три таблицы (Employee, Role, Fees)

Таблица: Сотрудник

  • ID
  • Имя
  • Тип

Таблица: Роль

  • EmployeeID
  • PlaceID
  • Тип

Таблица: Пошлины

  • EmployeeID
  • PlaceID
  • Цена

Может кто-нибудь помочь мне?

Edit: Некоторые примеры данных

Сотрудник

ID Name Type 
1 Name1 1 
2 Name2 1 
3 Name3 1 

Роль

EmployeeID PlaceID Type 
1   1  1 
2   2  1 
3   2  2 

Плата

EmployeeID PlaceID Price 
1    1  500 
2    2  700 
3    2  800 

Мой запрос должен вернуть (name3) как результат, потому что мы имеем множественный сотрудников в том же месте с Role.Type = 1 и Role.Type = 2, а также Name3 как Role.Type = 2 имеют самые большие взносы. Цена затем Role.Type = 1.

+1

показать код ... –

+1

Не могли бы вы изменить ваш вопрос включать некоторые примеры ввода и вывода? – HABO

+0

плохо показать пример данных, подождать 3-4 минуты –

ответ

1

Я не до моего стола, поэтому я не может его протестировать, но он должен работать:

with EmplyeeWithMaxFee as 
(
    select e.Id, e.Name, r.PlaceId, r.Type, Max(f.Price) as MaxFee 
    from Emplyee e 
    inner join Role r on r.EmployeeID = e.ID 
    inner join Fees f on f.EmployeeID = e.ID 
    group by e.Id, e.Name, r.PlaceId, r.Type 
) 

select e1.* 
from EmplyeeWithMaxFee e1 
where e1.Type = 2 and e1.MaxFee > (select Max(e2.MaxFee) from EmplyeeWithMaxFee e2 where e2.PlaceId = e1.PlaceId and e2.Id <> e1.Id and e2.Type = 1) 
+0

мой вопрос был не так хорош, прежде чем редактировать, но вы поняли мою мысль. Отлично!!! –

0

Укажите образец данных и укажите, что означает «иметь более высокую плату». Цена. Но, может быть, что-то подобное будет работать:

SELECT Employee.* FROM Employee INNER JOIN Role ON Employee.ID = Role.EmployeeID 
INNER JOIN Fees ON Role.EmployeeId = Fees.EmployeeID AND Role.PlaceID = Fees.PlaceID 
    WHERE Role.Type = 2 AND Fees.Price >= All (Select Fees1.Price FROM Role Role1 
INNER JOIN Fees Fees1 ON Role1.PlaceID = Fees.PlaceID WHERE Role.Type = Role1.Type) 
0

Если я правильно понял ваш вопрос, запрос, как этот будет решить вашу проблему

SELECT EMP2.ID 
FROM (SELECT ID, PLACEID, PRICE 
     FROM EMPLOYEE, FEES 
    WHERE EMPLOYEEID = ID AND TYPE = 2) EMP2, 
    (SELECT ID, PLACEID, PRICE 
     FROM EMPLOYEE, FEES 
    WHERE EMPLOYEEID = ID AND TYPE = 1) EMP1 
WHERE EMP2.PLACEID = EMP1.PLACEID AND EMP2.PRICE > EMP1.PRICE 
Смежные вопросы