一尘不染

MySQL将多行转换为单行中的列

mysql

我有一个带有列的详细信息表:

  • user_id int
  • 代码int
  • 值int

我想建立一个汇总表,如下所示:

  • user_id int
  • valueA int
  • valueB int

在详细信息表中,valueA对应于说代码5,而valueB对应于说代码6,所以我正在寻找类似的东西:

插入摘要(user_id,valueA,valueB)VALUES(从详细信息中选择???);

当然,问题是我正在查看“详细信息”表中的多行以填充“摘要”表中的一行。

例如,如果我有以下详细信息行:

1  5  100
1  6  200
2  5  1000
2  6  2000

我想在汇总表中添加以下内容:

1  100   200
2  1000  2000

有任何想法吗?


阅读 441

收藏
2020-05-17

共1个答案

一尘不染

MySQL没有PIVOT / UNPIVOT语法,这使您可以结合使用GROUP BY和CASE表达式:

INSERT INTO SUMMARY
  (user_id,valueA,valueB) 
  SELECT d.user_id,
         MAX(CASE WHEN d.code = 5 THEN d.value ELSE NULL END),
         MAX(CASE WHEN d.code = 6 THEN d.value ELSE NULL END),
    FROM DETAILS d
GROUP BY d.user_id
2020-05-17