2012-03-12 17 views
0

this articleに続いて、私は部分的にmySQLテーブルを転置することができました。いくつかのデータを挿入し、その後、GROUP_CONCATを使用したPIVOTの問題

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'); 

を、今私はpatientslymphoidまたはmyeloid病理の影響を受けているものを取得する必要があります:私は取得

​​

患者がこれら病変の1つに罹患したことを示すこのような表、または利用可能な情報がない場合NULL

patient myeloid lymphoid 
1  yes  NULL 
2  no  yes 
3  no  NULL 
4  NULL  yes 

これらのデータは定期的なテストに対応しています。簡略化のためにtestパラメータを省略しました(test INT NOT NULL)。しかし、問題は、同じ患者に対して2つのデータがある場合です。たとえば、のは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 *によって生成され、2つのカンマ区切り値があります。

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 
関連する問題