关注this article,我已经能够部分转置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
)。但问题是当我为同一患者提供两个数据时。例如,让我们为患者2添加test
密钥和新测试(所有先前的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
考虑到考试编号需要做些什么?
答案 0 :(得分:1)
只需将测试添加到您的分组 -
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, test