Счетчик SQL в пределах MAX select - PullRequest
       5

Счетчик SQL в пределах MAX select

0 голосов
/ 25 августа 2018

Мне нужно сделать кросс-таблицу некоторых данных из моей таблицы образцов с количеством значений кросс-таблицы. В приведенной ниже таблице я показываю несколько записей для двух участников, мне нужно сопоставить эту информацию с группировкой по 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

Как мне справиться с этим?

Спасибо, Грег

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы можете упростить эти агрегаты

Например:

...
COUNT(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN 1 END) AS [PLA_250],
...
0 голосов
/ 25 августа 2018

Вы, вероятно, хотите:

SUM(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN 1 ELSE 0 END) AS 'PLA_250',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...