Mysql查询将表格从长格式转换为宽格式

use*_*250 2 mysql

我有一个名为ContactAttrbiutes的表,其中包含每个联系人属性的列表.为这些联系人存储的数据类型包括:标题,姓名,姓氏电话号码等.

当前表

+-------------+-----------+------------------------------+
| attributeId | ContactId | AttributeValue               |
+-------------+-----------+------------------------------+
|           1 |         5 | Lady                         |
|           2 |         5 | Elizabeth                    |
|           3 |         5 | E                            |
|           4 |         5 | Anson                        |
|           5 |         5 |                              |
|           6 |         5 |                              |
|           7 |         5 |                              |
|           8 |         5 |                              |
|          10 |         5 | 0207 72776                   |
|          11 |         5 |                              |
|          12 |         5 | 0207 22996                   |
|          13 |         5 | 0207 72761                   |
|          14 |         5 |                              |
|          15 |         5 |                              |
|          60 |         5 | Lloyds                       |
|          61 |         5 |                              |
|           1 |        10 | Mr                           |
|           2 |        10 | John                         |
|           3 |        10 | J C                          |
|           4 |        10 | Beveridge                    |
|           5 |        10 | Esq QC                       |
|           6 |        10 | Retired                      |
|           7 |        10 |                              |
|           8 |        10 |                              |
|          10 |        10 | 0207 930                     |
|          11 |        10 |                              |
|          12 |        10 |                              |
|          13 |        10 | 0207 930                     |
|          14 |        10 |                              |
|          15 |        10 |                              |
|          60 |        10 |                              |
|          61 |        10 |                              |
+-------------+-----------+------------------------------+
Run Code Online (Sandbox Code Playgroud)

但是我想运行一个查询来创建一个看起来像......的表.

新表

+-----------+----------------------+-------------------------+-----------------------+------------------------+
| ContactId | AttributeValue_Title | AttributeValue_ForeName |AttributeValue_Initial | AttributeValue_Surname |
+-----------+----------------------+-------------------------+-----------------------+------------------------+
| 5         | Lady                 | Elizabeth               | E                     |  Anson                 |
+-----------+----------------------+-------------------------+-----------------------+------------------------+
| 10        | Mr                   | John                    | J C                   | Beveridge              |
+-----------+----------------------+-------------------------+-----------------------+------------------------+
Run Code Online (Sandbox Code Playgroud)

我确信有一个非常简单的答案,但我花了好几个小时看.有人可以帮忙吗?

以上只是我桌上的一小部分,我有750,000个联系人.另外,我希望最终表格的列数比上面描述的多,但它们将来自现有表格的不同属性.

非常感谢你提前.

ech*_*_Me 5

试试这个

    SELECT ContactId , 
 max(CASE when attributeId = 1 then AttributeValue end) as AttributeValue_Title ,
 max(CASE when attributeId = 2 then AttributeValue end )as AttributeValue_ForeName ,
 max(CASE when attributeId = 3 then AttributeValue end )as AttributeValue_Initial ,
 max(CASE when attributeId = 4 then AttributeValue end) as AttributeValue_Surname  
 from Table1 
 group by ContactId
Run Code Online (Sandbox Code Playgroud)

在这里演示

  • 如果你想让你的结果更长,attributeId那么只需在代码中添加一个案例陈述.