Мне нужно сделать кросс-таблицу некоторых данных из моей таблицы образцов с количеством значений кросс-таблицы.
В приведенной ниже таблице я показываю несколько записей для двух участников, мне нужно сопоставить эту информацию с группировкой по PID.
Вот некоторые данные из таблицы:
PID SAMPLE_TYPE SAMPLE_VOLUME
PID1 PLASMA_EDT 250
PID1 PLASMA_EDT 1200
PID1 PLASMA_EDT 1000
PID1 PLASMA_EDT 1000
PID1 PLASMA_EDT 1000
PID1 SER 500
PID1 SER 500
PID1 SER 1000
PID2 PLASMA_EDT 250
PID2 PLASMA_EDT 1200
PID2 PLASMA_EDT 1000
PID2 PLASMA_EDT 500
PID2 PLASMA_EDT 1000
PID2 SER 500
PID2 SER 1000
PID2 SER 1000
В качестве вывода мне нужно следующее:
PID PLA_250 PLA_500 PLA_1000 PLA1200 SER_500 SER_1000
PID1 1 0 3 1 2 1
PID2 1 1 2 1 1 2
Итак, я попробовал следующее, но с ошибкой:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
.
SELECT S.C_PID AS PID,
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_250',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '500' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_500',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '1000' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_1000',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '1200' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_1200',
MAX(CASE WHEN S.SAMPLE_TYPE = 'SER' AND S.SAMPLE_VOLUME = '500' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'SER_500',
MAX(CASE WHEN S.SAMPLE_TYPE = 'SER' AND S.SAMPLE_VOLUME = '1000' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'SER_1000'
FROM SAMPLE S
WHERE S.C_PID IN ('PID1','PID2')
AND S.SAMPLE_TYPE IN ('PLASMA_EDT','SER')
GROUP BY S.C_PID
Как мне справиться с этим?
Спасибо,
Грег