sql—将一列的结果显示为两列

jdg4fx2g  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(468)

从表中选择参与者将导致

Participants
-------
John
Nancy
Jem
Albert
Smith
Daniella

我想要一个查询结果显示

Player   Opponent
------   --------
John      Nancy
Jem       Albert
Smith     Daniella

这个问题的一个很好的例子是用于生成单淘汰锦标赛对的查询。

1rhkuytd

1rhkuytd1#

你可以使用窗口功能。只需引导+行号获得对手,然后获得奇数玩家

SELECT player,Opponent FROM
 (
   SELECT player, Number, LEAD(player)OVER(ORDER BY Number)Opponent from
    (
       SELECT player, ROW_NUMBER()OVER (ORDER BY player)Number FROM Table
    )X
 )Y
   WHERE Number % 2 <> 0
wn9m85ua

wn9m85ua2#

你可以用 row_number() 和聚合:

select min(player) as player, max(player) as opponent
from (select t.*, row_number() over (order by player) as seqnum
      from t
     ) t
group by floor( (seqnum - 1) / 2)
oxosxuxt

oxosxuxt3#

非常感谢奥尔加和戈登的贡献。我发现奥尔加的答案更接近我的需要。
再次感谢大家

相关问题