我有一个列的详细信息表:
> user_id int
>代码int
> value int
我想构建一个如下所示的汇总表:
> user_id int
> valueA int
> valueB int
在详细信息表中,valueA对应于say,代码5,valueB对应于say,代码6,所以我正在寻找类似的东西:
插入摘要(user_id,valueA,valueB)VALUES(SELECT from from details);
问题当然是我正在查看“详细信息”表中的多行以填充“摘要”表中的一行.
例如,如果我有详细的以下行:
1 5 100
1 6 200
2 5 1000
2 6 2000
我想在摘要表中得到以下结果:
1 100 200
2 1000 2000
有任何想法吗?
解决方法:
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