sql - 如何将列值转换为行值?

标签 sql postgresql

我正在尝试将 PostgreSQL 中的列值转换为行。每个系列赛中每个球员最多可以参加 3 场比赛 (bof2)。对于每场比赛,他都有他选择的口袋妖怪和他得分的分数。其外观如下:

<表类=“s-表”> <标题> 玩家 挑选的神奇宝贝 已选择 比赛系列 匹配 ID 积分 <正文> Ember 小火龙 1 213 101 43 Ember bool 巴索 2 213 102 52 Ember 皮卡丘 3 213 103 70 布洛克 玛瑙 1 145 157 57 布洛克 岩浆 2 145 158 63 加里 小火龙 1 213 101 56 加里 尼多金 2 213 102 36 加里 岩浆 3 213 103 34

想要的结果:

<表类=“s-表”> <标题> 玩家 第一场比赛神奇宝贝 第一个赛点 第二场神奇宝贝比赛 第二个赛点 第三场神奇宝贝比赛 第三个赛点 <正文> Ember 小火龙 43 bool 巴索 52 皮卡丘 70 布洛克 玛瑙 57 岩浆 63 空 空 加里 小火龙 56 尼多金 36 岩浆 34

我尝试过使用 nth_element 和 ronumber() 但都无法弄清楚。

最佳答案

根据选择的列值检索第一、第二和第三匹配的神奇宝贝和分数。使用玩家明智的分组依据和 MAX() 函数,因为显示单行。

-- PostgreSQL
SELECT Player
     , MAX(CASE WHEN Picked = 1 THEN Pokemon_Picked END) "First Match Pokemon"
     , MAX(CASE WHEN Picked = 1 THEN Points END) "First Match Points"
     , MAX(CASE WHEN Picked = 2 THEN Pokemon_Picked END) "Second Match Pokemon"
     , MAX(CASE WHEN Picked = 2 THEN Points END) "Second Match Points"
     , MAX(CASE WHEN Picked = 3 THEN Pokemon_Picked END) "Third Match Pokemon"
     , MAX(CASE WHEN Picked = 3 THEN Points END) "Third Match Points"
FROM table_name
GROUP BY Player

关于sql - 如何将列值转换为行值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71629999/

相关文章:

postgresql - GeoDjango 设置 : ERROR: could not access file "$libdir/postgis-1.5": No such file or directory

postgresql - Postgres HashAggregate 运行缓慢

sql - 在 order by 子句中使用 bool 表达式

sql - 在 Oracle 中进行多行插入的最佳方法?

python - 如何在 ponyorm 中查看带有值的完整查询

php - 将 docker-compose.yml 中的包安装到 docker 容器中

mysql - 需要有关加快查询速度的建议

mysql - 如何修改mysql数据库的字符集

mysql - 计算表中两组不同的行,然后将它们相除

sql - 基于 FK 关系的约束表