I have below SalaryTable.
----------------
EmpId Salary
----------------
1 100
2 200
3 300
1 400
2 500
3 600
1 700
2 800
3 900
1 1000
2 1100
3 1200
----------------
样本输出
-------------------
EmpId Salary
-------------------
1 700
2 800
3 900
-------------------
例如:
All the salary of Employee ID 1 [100,400,700,1000] and 700 is second largest salary of employee 1
像明智地显示所有员工一样。 我想在SQL和LINQ查询中显示第二个最高薪水的每个雇员。
答案 0 :(得分:1)
在Linq中尝试此细节
var results = Context.Employees
.GroupBy(b => b.Id)
.Select(e => new Table1
{
Id = e.Key,
Salary = e.OrderByDescending(f => f.Salary).Select(f => f.Salary).Distinct().Skip(1).First()
}).ToList();
如果它对SQL不友好,请在GroupBy之后执行ToList()
我在薪水部分添加了与众不同的内容,以检查员工ID = 1是否具有450、450、450和300作为薪水,那么300是我心中第二高的薪水
答案 1 :(得分:0)
SQL版本:
SELECT EmpId, MAX(Salary) AS Salary
FROM SalaryTable x
WHERE Salary < (SELECT MAX(Salary) FROM SalaryTable WHERE EmpId = x.EmpId)
GROUP BY EmpId
LINQ版本:
list
.GroupBy(x => x.Id)
.Select(g =>
g.GroupBy(item => item.Salary)
.OrderByDescending(e => e.Key)
.Skip(1)
.First().First());