Sql 将第n行的条目与第(n+1)行的条目配对

Sql 将第n行的条目与第(n+1)行的条目配对,sql,postgresql,Sql,Postgresql,我有一张成绩表 id | name | wins ----+------------------- 57 | Paul | 10 64 | Sven | 9 62 | Peter | 9 59 | Marina | 8 58 | Carlos | 4 60 | Pamela | 3 61 | Marcus | 2 63 | Hank | 1 其中,我希望将每个第n个条目与每个第n+1个条

我有一张成绩表

id |       name  | wins
----+-------------------
57 | Paul        | 10
64 | Sven        | 9
62 | Peter       | 9
59 | Marina      | 8
58 | Carlos      | 4
60 | Pamela      | 3
61 | Marcus      | 2
63 | Hank        | 1
其中,我希望将每个第n个条目与每个第n+1个条目配对,这样生成的表如下所示:

id | name    | id | name
----+-------------------
57 | Paul    | 64 | Sven
62 | Peter   | 59 | Marina
58 | Carlos  | 60 | Pamela
61 | Marcus  | 63 | Hank
哪个SQL语句可以实现这一点

;WITH cte AS (
    SELECT *,ROW_NUMBER() OVER (ORDER BY Wins DESC) as RowNum
    FROM
       @Table
)

SELECT *
FROM
    cte c1
    LEFT JOIN cte c2
    ON c1.RowNum + 1 = c2.RowNum
WHERE
    c1.RowNum % 2 <> 0
生成要使用的行号,看到Order by语句中有第三列replace SELECT NULL替换为该第三列

然后选择RowNum的剩余部分除以2 0的奇数行号的所有行,并使用RowNum+1自联接回自身。如果你有奇数行,你可以考虑使用左连接,这样你就不会掉掉没有匹配的1行。 生成要使用的行号,看到Order by语句中有第三列replace SELECT NULL替换为该第三列


然后选择RowNum的剩余部分除以2 0的奇数行号的所有行,并使用RowNum+1自联接回自身。如果你有一个奇数行,你可以考虑使用左连接,这样你就不会掉掉没有匹配的1行。我看不到图案对第一行和第二行,第三行和第四行,第五行和第六行,依此类推。这里是什么指定了顺序,这样我们就知道第一、第二、第n行了?是id列吗?如果是这样,则预期结果是错误的。第一个表由第三列排序,该列不可见。第二个表格正是所需的结果。你应该显示第三列。这里的第n项和第n+1项是什么?我看不到图案对第一行和第二行,第三行和第四行,第五行和第六行,依此类推。这里是什么指定了顺序,这样我们就知道第一、第二、第n行了?是id列吗?如果是这样,则预期结果是错误的。第一个表由第三列排序,该列不可见。第二个表就是所需的结果,你应该显示第三列。哦,移位的左连接比我要建议的带额外WHERE子句的笛卡尔连接更有意义。哦,移位的左连接比我要建议的带额外WHERE子句的笛卡尔连接更有意义。