Следуя this article, я смог частично перенести таблицу mySQL. Это таблица:Проблемы с PIVOT с использованием GROUP_CONCAT
CREATE TABLE `test`.`treat` (
`patient` INT NOT NULL ,
`pathology` VARCHAR(15) NOT NULL ,
`present` VARCHAR(15) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
затем вставить некоторые данные:
INSERT INTO `test`.`treat` (`patient`, `pathology`, `present`)
VALUES ('1', 'myeloid', 'yes'), ('2', 'lymphoid', 'yes'), ('2', 'myeloid', 'no'), ('3', 'myeloid', 'no'), ('4', 'lymphoid', 'yes');
и теперь мне нужно, чтобы получить то, что patients
страдают от lymphoid
или myeloid
патологии:
SELECT patient,
GROUP_CONCAT(if(pathology='myeloid', present, NULL)) AS 'myeloid',
GROUP_CONCAT(if(pathology='lymphoid', present, NULL)) AS 'lymphoid'
FROM treat
GROUP BY patient
Я получаю таблица, подобная этой, которая показывает, когда пациент перенес одну из этих патологий или NULL
, если нет информации:
patient myeloid lymphoid
1 yes NULL
2 no yes
3 no NULL
4 NULL yes
Эти данные соответствуют периодическим испытаниям. Для упрощения я использовал параметр test
(test INT NOT NULL
). Но проблема в том, что у меня есть две данные для одного и того же пациента. Например, давайте добавим test
ключ и новый тест для пациента 2 (все предыдущие test
значения соответствует тест 1):
INSERT INTO `test`.`treat` (`patient`, `pathology`, `present`, `test`)
VALUES ('2', 'myeloid', 'yes', '2');
Если мы запустим запрос мы получаем эту таблицу:
patient myeloid lymphoid
1 yes NULL
2 no,yes yes
3 no NULL
4 NULL yes
Пациент номер 2 имеет строку myeloid
, которая производится * GROUP_CONCAT * с двумя значениями, разделенными запятой. Мне нужно иметь строку для каждого значения, например:
patient myeloid lymphoid
1 yes NULL
2 no yes
2 yes NULL
3 no NULL
4 NULL yes
Что нужно сделать, чтобы принять во внимание номер теста?