SQL: объединить две строки в одну

0

В 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. Как я могу это сделать? Спасибо

  • 0
    Почему значение type1 появляется в столбце с именем type?
  • 0
    @P.SalmonP.Salmon, да, ты прав, это немного запутало, теперь я исправил вопрос. Спасибо
Показать ещё 4 комментария
Теги:

2 ответа

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

Результаты:

| Name | Type | Group |
|------|------|-------|
|  bar |  0.3 |   bbb |
|  foo |  0.2 |   aaa |
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.

Это можно увидеть в этой скрипке

  • 0
    Да, на самом деле я выполняю соединение на одной и той же таблице, но с 1 000 000 записей это занимает много времени
  • 0
    @ NickF_93, если это так, и если к этому запросу часто обращаются, следует рассмотреть возможность нормализации Типа и Группы в отдельную таблицу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню