После этой статьи я смог частично перенести таблицу mySQL. Это таблица:
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
Что нужно сделать, чтобы учесть номер теста?