我有一个表,我正在try 按Stage中的列值排序.

它看起来像这样:

CaseID Stage EventDate
1 A 01/01/10
1 B 01/03/10
1 B 01/04/10
1 C 01/05/10
2 A 02/01/10
2 B 02/02/10
2 C 02/03/10
2 C 02/05/10

我试着按阶段组织数据,以便只显示最新的EventDate个——类似于这样:

CaseID A B C
1 01/01/10 01/04/10 01/05/10
2 02/01/10 02/02/10 02/05/10

我做了一份group by美元的声明

SELECT 
    CaseID,
    CASE WHEN Stage = 'A' THEN MAX(EventDate) END AS A,
    CASE WHEN Stage = 'B' THEN MAX(EventDate) END AS B,
    CASE WHEN Stage = 'C' THEN MAX(EventDate) END AS C
FROM
    StageTable
GROUP BY 
    CaseID, Stage

但这返回了太多的行,其中包含NULL占位符:

CaseID A B C
1 01/01/10 NULL NULL
1 NULL 01/04/10 NULL
1 NULL NULL 01/05/10
2 02/01/10 NULL NULL
2 NULL 02/02/10 NULL
2 NULL NULL 02/05/10

我想把每一行都压缩一下,但我不知道我哪里做错了.我见过其他类似问题的问题,但它们似乎都存在联合表显示重复结果的问题.

任何建议都是有用的

推荐答案

您希望每个CaseID有一个结果行,所以只有GROUP BY CaseID行.然后使用条件聚合,即将条件放在MAX()中.

SELECT
  CaseID
  ,MAX(CASE WHEN Stage = 'A' THEN EventDate END) AS A
  ,MAX(CASE WHEN Stage = 'B' THEN EventDate END) AS B
  ,MAX(CASE WHEN Stage = 'C' THEN EventDate END) AS C
FROM StageTable
GROUP BY CaseID
ORDER BY CaseID;

Sql相关问答推荐

创建每小时重置的序列号

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

无效和不匹配的计数

BigQuery`喜欢ANY‘和`不喜欢ANY’

为什么两个不同的窗口函数给出不同的排序结果?

如何利用单列历史SQLsnowflake获得合并结果

数组列的postgres更新查询

如何从查询中的三个或更多个表中添加另一个相同的列?

IF NOT EXISTS子查询的性能瓶颈

属于(日期)范围类型及其交集的总权重​

优化Postgres搜索未知长度的子串

查找滑动窗口框架中的最大和最小列值

Proc SQL Select Distinct SAS

当 ansible 变量未定义或为空时,跳过 sql.j2 模板中的 DELETE FROM 查询

DB2 SQL查询结果多余数据

函数调用作为插入值语句中的参数

在 SQL 中使用循环遍历按时间顺序排列的数据

如何仅在满足条件时才按顺序在 SQL 中计数?

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

如何找到特定时间间隔内的最大和最小日期?