在MySQL上,我想将2行合并为1行,例如:
| Name | Value | Res |
| foo | Type | 0.2 |
| foo | Group | aaa |
| bar | Type | 0.3 |
| bar | Group | bbb |
我的预期结果将是:
| Name | Type | Group |
| foo | 0.2 | aaa |
| bar | 0.3 | bbb |
我想将两个具有一些常见值的条目合并到一个条目中,其中有两列,这些列在Type
列的值上区分Res
列中的值。我该怎么做? 谢谢
您的预期结果需要做透视尝试使用条件聚合函数来制作它。
CREATE TABLE T(
Name varchar(50),
Value varchar(50),
Res varchar(50)
);
insert into t values ( 'foo' ,'Type' , '0.2');
insert into t values ( 'foo' ,'Group' , 'aaa');
insert into t values ( 'bar' ,'Type' , '0.3');
insert into t values ( 'bar' ,'Group' , 'bbb');
查询 1:
SELECT Name,
MAX(CASE WHEN Value= 'Type' THEN Res END) Type,
MAX(CASE WHEN Value= 'Group 'THEN Res END) `Group`
FROM T
GROUP BY Name
结果:
| Name | Type | Group |
|------|------|-------|
| bar | 0.3 | bbb |
| foo | 0.2 | aaa |
这个来自Stack Exchange的答案 - 应该非常有用。
为此,您需要运行两个子查询,然后将结果与 JOIN 命令组合在一起。
假设您的表名为 T:
SELECT s.`Name`, s.`type`, p.`group`
FROM
(
SELECT `Name`, `Res` as `type`
FROM T WHERE `Value`="type1"
) s
LEFT JOIN
(
SELECT `Name`, `Res` as `group`
FROM T
WHERE `Value`="group1"
) p
ON s.`Name` = p.`Name`
我知道您的示例更改了变量名称以便于阅读 - 但要小心您的选择,因为它们可能是 MySQL 中的保留字。
这可以从这把小提琴中看到