在MySQL上,我想合并1中的2行:
| 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 |
我想将两个具有某些公共值的条目合并到一个具有两列的列中,这两个列在Res
列的值上区分Type
列中的值。我怎样才能做到这一点?
谢谢
答案 0 :(得分:3)
您的预期结果需要做枢纽尝试使用条件聚合函数来实现。
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
Results :
| Name | Type | Group |
|------|------|-------|
| bar | 0.3 | bbb |
| foo | 0.2 | aaa |
答案 1 :(得分:1)
这个来自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中可能是保留字。
这可以在此fiddle
中看到