我们在学校做的一个测试中有一个挑战问题,我们创建一个 t-sql 脚本,该脚本使用游标按员工工资对表中的数据进行排序,而不使用另一个表或使用 ORDER BY 子句。
没有人这样做,因为正如我所说,这是一个具有挑战性的问题,我想在家里做,但不幸的是我没有取得太大进展,所以任何帮助都会更感激。
提前谢谢了!
我们在学校做的一个测试中有一个挑战问题,我们创建一个 t-sql 脚本,该脚本使用游标按员工工资对表中的数据进行排序,而不使用另一个表或使用 ORDER BY 子句。
没有人这样做,因为正如我所说,这是一个具有挑战性的问题,我想在家里做,但不幸的是我没有取得太大进展,所以任何帮助都会更感激。
提前谢谢了!
我认为以这种方式订购数据绝对是错误的方式 - 无论如何,这种方法可以满足 OP 的要求。是的 - 游标绝对是多余的,因为您可以在没有最后一个WHERE
子句的情况下运行内部查询来进行排序而不使用ORDER BY
. 仅添加它以配合原始问题。
--CREATE TABLE salary( emplId int, salary int );
--INSERT INTO salary VALUES( 4, 150), (2, 100), (3, 200), (1, 10);
DECLARE @emplId INT;
DECLARE @runs INT = 0;
DECLARE sal CURSOR
FOR SELECT EmplId FROM "salary"
OPEN sal
FETCH NEXT FROM sal INTO @emplId
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT
S."emplId", S."salary"
FROM
"salary" AS S
CROSS APPLY ( SELECT COUNT( "salary" ) AS "successors"
FROM "salary"
WHERE "salary" < S."salary" ) AS Data
WHERE
Data."successors" = @runs
SET @runs +=1
FETCH NEXT FROM sal INTO @emplId
END
CLOSE sal
DEALLOCATE sal;