2012-03-12 1 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 병리에 의해 영향을받는 것을 얻을해야합니다 내가 할

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는 두 개의 쉼표로 구분 된 값을 사용하여 * GROUP_CONCAT *에 의해 생성되는 myeloid 행을가집니다. 다음과 같이 각 값에 대해 줄을 지정해야합니다.

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