mysql - SQL 查询根据列值对表进行透视

标签 mysql sql pivot

这可能之前已经介绍过,但我的 SQL 技能水平很低,我什至不确定如何正确搜索我想要的内容!

我想我想做的事情相对简单,似乎使用旋转可能是解决方案,但我真的不确定它的语法。

我有一个 SELECT 查询可以返回这种格式的数据:

 TeamID |   PlayerName
--------+-------------------
   1    | Arthur Schiller
   1    | Dimitre Rogatchev
   1    | Mohamed Hechmeh
   1    | Santosh Pradhan
   2    | Adriano Ferrari
   2    | Amanda Compagnone
   2    | Danail Delchev
   2    | David Bergin

我想从 ID 创建列,其中的行填充了适当的名称,如下所示:

        1         |         2
------------------+-------------------
 Arthur Schiller  | Adriano Ferrari
 Dimitre Rogatchev| Amanda Compagnone
 Mohamed Hechmeh  | Danail Delchev
 Santosh Pradhan  | David Bergin

目的是在 php mysqli_fetch_assoc 调用中使用返回的数据在网站上显示两列。

在此先感谢您的帮助!

最佳答案

不幸的是,MySQL 不支持窗口函数为每个团队的每一行生成唯一值。您可以使用变量创建派生的“行号”,也可以使用类似于以下内容的相关子查询:

select 
  max(case when teamid = 1 then playername else '' end) Team1,
  max(case when teamid = 2 then playername else '' end) Team2
from
(
  select TeamId,
    PlayerName,
    (select count(*)
     from yourtable d
     where t.teamId = d.TeamId
       and t.playername <= d.PlayerName) rn
  from yourtable t
) d
group by rn;

参见 SQL Fiddle with Demo .

注意:根据您的数据大小,您可能会遇到一些性能问题。这适用于较小的数据集。

关于mysql - SQL 查询根据列值对表进行透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813202/

相关文章:

sql - 使用一个查询创建汇总结果

sql - 将行旋转到列

python - 系统错误 : The connection has been disabled

php - 从 PHP 向 MySql 插入日期和时间值

php - 如何从两个表中检索匹配的值并排除一些?

sql - 如何编写sql查询来得到这个结果

sql - HSQLDB错误: unexpected token: FOREIGN

mysql - 数据仓库任意字段

mysql - 使用聚合函数从查询中选择非组字段

c# - 将日期时间作为包含数量字段的列的 SQL 透视