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

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

从表中选择参与者将导致

  1. Participants
  2. -------
  3. John
  4. Nancy
  5. Jem
  6. Albert
  7. Smith
  8. Daniella

我想要一个查询结果显示

  1. Player Opponent
  2. ------ --------
  3. John Nancy
  4. Jem Albert
  5. Smith Daniella

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

1rhkuytd

1rhkuytd1#

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

  1. SELECT player,Opponent FROM
  2. (
  3. SELECT player, Number, LEAD(player)OVER(ORDER BY Number)Opponent from
  4. (
  5. SELECT player, ROW_NUMBER()OVER (ORDER BY player)Number FROM Table
  6. )X
  7. )Y
  8. WHERE Number % 2 <> 0
wn9m85ua

wn9m85ua2#

你可以用 row_number() 和聚合:

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

oxosxuxt3#

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

相关问题