在mysql中使用CASE将行转换为列

在mysql中使用CASE将行转换为列,mysql,pivot,case,Mysql,Pivot,Case,我有一张这样的桌子: +----------+---------+ | ipiresia | program | +----------+---------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 2 | | 2 |

我有一张这样的桌子:

    +----------+---------+
    | ipiresia | program |
    +----------+---------+
    |        1 |       1 |
    |        1 |       2 |
    |        1 |       3 |
    |        2 |       1 |
    |        2 |       2 |
    |        2 |       3 |
    |        3 |       1 |
    |        3 |       2 |
    |        3 |       3 |
    |        4 |       1 |
    |        4 |       2 |
    +----------+---------+
+----------+----------+----------+----------+
| ipiresia | program1 | program2 | program3 |
+----------+----------+----------+----------+
|        1 | x        | x        | x        |
|        2 | x        | x        | x        |
|        3 | x        | x        | x        |
|        4 | x        | x        |          |
+----------+----------+----------+----------+
我想做一个查询来转换表,如下所示:

    +----------+---------+
    | ipiresia | program |
    +----------+---------+
    |        1 |       1 |
    |        1 |       2 |
    |        1 |       3 |
    |        2 |       1 |
    |        2 |       2 |
    |        2 |       3 |
    |        3 |       1 |
    |        3 |       2 |
    |        3 |       3 |
    |        4 |       1 |
    |        4 |       2 |
    +----------+---------+
+----------+----------+----------+----------+
| ipiresia | program1 | program2 | program3 |
+----------+----------+----------+----------+
|        1 | x        | x        | x        |
|        2 | x        | x        | x        |
|        3 | x        | x        | x        |
|        4 | x        | x        |          |
+----------+----------+----------+----------+
我使用了此查询,但它不起作用:

SELECT ipiresia, (CASE program WHEN '1' THEN 'x' ELSE NULL) AS program1, (CASE   program WHEN '2' THEN 'x' ELSE NULL) AS program2, (CASE program WHEN '3' THEN 'x' ELSE NULL) AS program3 FROM table GROUP BY ipiresia

非常感谢您的帮助。

看起来很像我,但无论如何

SELECT ipiresia
     , MAX(CASE WHEN program = 1 THEN 'x' ELSE '' END) program1 
     , MAX(CASE WHEN program = 2 THEN 'x' ELSE '' END) program2 
     , MAX(CASE WHEN program = 3 THEN 'x' ELSE '' END) program3 
  FROM my_table 
 GROUP 
    BY ipiresia;

就我个人而言,我不会这么做——我更愿意在可能的情况下处理应用程序级代码中的数据显示问题。

我认为我的案例可能与您指出的案例不同。也许您想解释一下原因,因为您给出的示例中有三列,案例基于第三列。我不知道这是否足够。