将重复的行转换为mysql中的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将重复的行转换为mysql中的列相关的知识,希望对你有一定的参考价值。

我有2个表,学生表包含regNo和name列;和reg_subject表,其中包含学生单独注册的科目列表。学生可以注册多个科目。

我想生成一个将连接两个表的表,以便reg_subject表将以行将转为列的方式进行转置。下面列出了两个表以及结果表。

学生表

| regNo | name  |
_________________
| 1001  | Saleh |
-----------------
| 1002  | Moses |
-----------------
| 1003  | Hafsa |

reg_subject表

| regNo | subject  |
____________________
| 1001  | English  |
--------------------
| 1001  | Math     |
--------------------
| 1002  | English  |
--------------------
| 1003  | Math     |
--------------------
| 1002  | Math     |
--------------------
| 1003  | Physics  |
--------------------
| 1001  | Physics  |
--------------------
| 1002  | Physics  |
--------------------

转置的连接表应如下所示:

The transposed joint table

| regNo | name  | subject1 | subject2 | subject3 |
__________________________________________________
| 1001  | Saleh | English  | Math     | Physics  |
--------------------------------------------------
| 1002  | Moses | English  | Math     | Physics  |
--------------------------------------------------
| 1003  | Hafsa |          | Math     | Physics  |
--------------------------------------------------
答案
 SELECT regNo, name,               
        MAX( CASE WHEN subject = 'English'
                  THEN subject
             END) as subject1,
        MAX( CASE WHEN subject = 'Math'
                  THEN subject
             END) as subject2,
        MAX( CASE WHEN subject = 'Physics'
                  THEN subject
             END) as subject3
FROM YourTable
GROUP BY regNo, name

以上是关于将重复的行转换为mysql中的列的主要内容,如果未能解决你的问题,请参考以下文章

使用tidyr将字符串长度不均匀的行拆分为R中的列[重复]

如何将具有排名值的列转换为oracle中的行

将mysql中的列从上到下行求和并选择值所在的行

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

将dict列表转换为pandas中的行[重复]

MySQL获取每个产品组的列值最小的行[重复]