sql查询三个表(员工、角色、费用)

sql查询三个表(员工、角色、费用),sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试查找所有具有role.Type=2且费用更高的员工。在相同的位置role.PlaceID上,对role.Type=1的员工进行定价 表:雇员 身份证件 名称 类型 表:角色 员工编号 PlaceID 类型 表:费用 员工编号 PlaceID 价格 有人能帮我吗 编辑:一些数据示例 雇员 ID Name Type 1 Name1 1 2 Name2 1 3 Name3 1 角色 费用 我的查询应该返回Name3作为结果,因为我们有多个员工在同一个位置,同时有Role.Type=1

我正在尝试查找所有具有role.Type=2且费用更高的员工。在相同的位置role.PlaceID上,对role.Type=1的员工进行定价

表:雇员

身份证件 名称 类型 表:角色

员工编号 PlaceID 类型 表:费用

员工编号 PlaceID 价格 有人能帮我吗

编辑:一些数据示例

雇员

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

费用


我的查询应该返回Name3作为结果,因为我们有多个员工在同一个位置,同时有Role.Type=1和Role.Type=2,还有Name3作为Role.Type=2,费用最高。价格其次是Role.Type=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)
    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)

提供一份数据样本,并说明“收费更高。价格更高”的含义。但是,也许类似的方法会奏效:

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)
    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)

如果我对你的问题理解正确,像这样的问题会解决你的问题

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

你能把你的问题编辑成包含一些输入和输出的示例吗?我会展示一些数据示例,等3-4分钟,在编辑之前我的问题不是很好,但你明白我的意思了。完美的