SQL-每组一个值转置数据

时间:2017-05-24 21:25:25

标签: sql teradata

我有与其相关的不同代码和日期的项目。对于代码P和L,我想将与代码关联的最小日期作为新列返回。对于代码D,我想将最大日期作为新列返回。我的数据如下:

Item    Code    Date
ABC     P       11/24/2017 13:01
ABC     L       11/24/2017 16:30
ABC     P       11/25/2017 12:30
ABC     L       11/25/2017 20:24
ABC     D       11/26/2017 21:34
ABC     D       11/26/2017 23:16
ABD     P       10/5/2017 9:30
ABD     L       10/5/2017 13:23
ABD     L       10/6/2017 3:04
ABD     D       10/7/2017 8:31

期望的结果是:

Item    Code_P              Code_L              Code_D
ABC     11/24/2017 13:01    11/24/2017 16:30    11/26/2017 23:16
ABD     10/5/2017 9:30      10/5/2017 13:23     10/7/2017 8:31

因此每个项目都有一行,代码P和L显示最小值,代码D具有最大值。任何想法如何去做?我正在使用Teradata。谢谢!

1 个答案:

答案 0 :(得分:3)

只需使用条件聚合:

select item,
       max(case when code = 'P' then date end) as p_date,
       max(case when code = 'L' then date end) as l_date,
       max(case when code = 'D' then date end) as s_date
from t
group by item;