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');
을 지금은 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는 두 개의 쉼표로 구분 된 값을 사용하여 * GROUP_CONCAT *에 의해 생성되는 myeloid
행을가집니다. 다음과 같이 각 값에 대해 줄을 지정해야합니다.
patient myeloid lymphoid
1 yes NULL
2 no yes
2 yes NULL
3 no NULL
4 NULL yes
테스트 번호를 고려하려면 어떻게해야합니까?