Проблема с транспонировать строки в столбец (Pivot) в той же таблице MYSQL - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над базой данных MySQL, которая похожа на эту

CREATE TABLE IF NOT EXISTS `tblcustomfieldsvalues` (
  `fieldid` int(11) NOT NULL,
  `relid` int(1) NOT NULL,
  `values` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

, и пример данных, как показано ниже

INSERT INTO `tblcustomfieldsvalues`(`fieldid`, `relid`, `values`) VALUES
('396', '1', 'willyemail@gmail.com'),
('397', '1', 'willy robertus'),
('398', '1', 'Santo Paulus'),
('396', '2', 'antoni@gmail.com'),
('397', '2', 'Antoni robertus'),
('398', '2', 'Sasa Paulus');

, которые дают мне что-то вроде этого

Фактическое изображение данных

Мои цели:

Мне нужно преобразовать преобразование данных в разные столбцы для каждого отдельного fieldid

Скажем, я хочу, чтобы fieldid 396 был A столбец, 397 как B и идентификатор поля 398 как C столбец

Итак, данные выглядят так:

Ожидание


Но я получил что-то вроде этого

Я попробовал этоquery

select
relid,
case when fieldid = "396" then tblcustomfieldsvalues.values end as A,
case when fieldid = "397" then tblcustomfieldsvalues.values end as B,
case when fieldid = "398" then tblcustomfieldsvalues.values end as C
from tblcustomfieldsvalues


Почти соответствуют моим ожиданиям, но есть много нулевых значений

relid   A   B   C
1   willyrobertus@gmail.com (null)  (null)
1   (null)  willy robertus  (null)
1   (null)  (null)  Santo Paulus
2   antoni@gmail.com    (null)  (null)
2   (null)  Antoni robertus (null)
2   (null)  (null)  Sasa Paulus


Попробуйте сгруппировать их поRelid я получил несовпадающую строку SQLFiddle

Большое спасибо

Вилли

1 Ответ

0 голосов
/ 25 февраля 2019

Требуется условное агрегирование

ДЕМО

select
relid,
max(case when fieldid = "396" then tblcustomfieldsvalues.values end) as A,
max(case when fieldid = "397" then tblcustomfieldsvalues.values end) as B,
max(case when fieldid = "398" then tblcustomfieldsvalues.values end) as C
from tblcustomfieldsvalues
group by relid

ВЫХОД:

relid   A                       B                C
1       willyemail@gmail.com    willy robertus   Santo Paulus
2       antoni@gmail.com        Antoni robertus  Sasa Paulus
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...