使用游标对表中的数据进行排序

时间:2012-12-18 17:02:35

标签: sql-server tsql sorting cursor

在我们在学校进行的测试中,我们遇到了一个问题,即我们要创建一个t-sql脚本,该脚本使用游标在不使用其他表或使用ORDER BY子句的情况下按员工工资对表中的数据进行排序。 / p>

没有人这样做是因为我说这是一个挑战性的问题,我试图在家里做,但不幸的是我没有取得太大进展,所以任何帮助都会得到更多的赞赏。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

我认为以这种方式订购数据的方法是绝对 - 无论如何,这种做法符合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;