【发布时间】:2019-01-31 14:32:41
【问题描述】:
我需要将样本表中的一些数据与交叉表值的计数进行交叉表。 在下表中,我显示了两个参与者的一些记录,我需要将此信息与 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
我应该如何解决这个问题?
谢谢, 格雷格
【问题讨论】:
-
您使用的是哪种 DBMS 产品?后格雷斯?甲骨文?
标签: sql sql-server crosstab