下一个人比上一个工资多多少 用一条sql语句写出来

2025-03-23 02:48:00
推荐回答(1个)
回答1:

用一句话还是比较复杂的,虽然需求看上去并不复杂:D

--方案---------------------------

同一个表,作自关联(行号=行号-1)。

WITH EmpSalary AS ( -- 因为结果集要自关联,使用CTE(公共表达式),可避免写n遍
SELECT
ROW_NUMBER() OVER (ORDER BY Value) AS RowNo -- 生成行号,按工资排序
,VALUE AS Salary
FROM dbo.Test
)
SELECT E1.*
,E2.Salary - E1.Salary AS Diff
FROM EmpSalary E1
LEFT JOIN EmpSalary E2 ON E2.RowNo = E1.RowNo + 1 -- 表自关联
ORDER BY E1.Salary

注:

1、以上代码使用了CTE(公共表达式),这样代码清晰。

2、不可使用内部字段(ID、EmpNo等),避免因为跳号而关联错误

3、相应地,使用了ROW_NUMBER()函数来产生临时性的行号