【问题标题】:SQL Count within MAX selectMAX 选择中的 SQL 计数
【发布时间】: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


【解决方案1】:

你可能想要:

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

【讨论】:

  • 谢谢dnoeth,它返回了我需要的东西。
【解决方案2】:

您可以简化这些聚合

例如:

...
COUNT(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN 1 END) AS [PLA_250],
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多