В 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 |
Я хотел бы объединить две записи с некоторыми общими значениями в одном, у которого есть два столбца, которые различают значение в столбце Res
для значения столбца Type
. Как я могу это сделать? Спасибо
Ваш результат ожидания должен сделать поворотную попытку использовать функцию агрегата состояния, чтобы сделать это.
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.
Это можно увидеть в этой скрипке