首页 > 解决方案 > MAX 选择中的 SQL 计数

问题描述

我需要将样本表中的一些数据与交叉表值的计数进行交叉表。在下表中,我显示了两个参与者的一些记录,我需要将此信息与 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

我应该如何解决这个问题?

谢谢,格雷格

标签: sqlsql-servercrosstab

解决方案


你可能想要:

SUM(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN 1 ELSE 0 END) AS 'PLA_250',

推荐阅读