sql查询三个表(员工、角色、费用)
我正在尝试查找所有具有role.Type=2且费用更高的员工。在相同的位置role.PlaceID上,对role.Type=1的员工进行定价 表:雇员 身份证件 名称 类型 表:角色 员工编号 PlaceID 类型 表:费用 员工编号 PlaceID 价格 有人能帮我吗 编辑:一些数据示例 雇员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
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分钟,在编辑之前我的问题不是很好,但你明白我的意思了。完美的