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子句的笛卡尔连接更有意义。