Oracle SQL group by query

时间:2016-10-13 16:27:58

标签: sql oracle

我有以下数据

Name   ID    Action      Action_Date
A123   234     ADD        21/05/2016
A123   234     DELETE     25/05/2016
A124   235     ADD        21/05/2016
A125   236     DELETE     25/05/2016

现在我试图低于结果

Name    ID   Date_Added     Dated_Deleted
A123    234     21/05/2016    25/05/2016
A124    235     21/05/2016     NULL
A125    236       NULL         25/05/2016

我知道我需要按名称和ID分组,但不太了解如何获得所需的输出。请帮忙

1 个答案:

答案 0 :(得分:2)

当您尝试压缩数据时,它被称为PIVOT。如果您使用的是Oracle,那么可以使用该名称的关键字,但我更喜欢有条件聚合的旧方法(在评论中由@Prdp提及)。代码将非常简单。

SELECT t.name
      ,t.id
      ,MAX(CASE WHEN t.action = 'ADD' THEN t.action_date END) AS date_added
      ,MAX(CASE WHEN t.action = 'DELETE' THEN t.action_date END) AS date_deleted
  FROM your_table t
 GROUP BY t.name
         ,t.id;