2012-03-12 75 views
0

以下this article,我已經能夠部分轉置一個mySQL表。這是表:PUBOT使用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'); 

,現在我需要得到什麼patientslymphoidmyeloid疾病影響:

​​

我得到這樣的表格顯示患者何時患有這些疾病之一,或者如果沒有可用信息,則顯示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 

什麼必須做的,考慮到測試號?

回答

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