Oracle SQL组数据值

时间:2014-12-29 18:17:54

标签: sql oracle

我有这张表:

TABLE_A

ID | ATTR_NAME | ATTR_ID | START_DATE
-------------------------------------
1  | XPTA      | 12      | 01-10-2013
1  | XPTO      | 167     | 01-10-2013
1  | XPTA      | 13      | 04-12-2013
2  | XPTA      | 12      | 03-09-2015
2  | XPTO      | 6       | 05-08-2012

TABLE_B (just to help understand)

ATTR_NAME | ATTR_ID | DESCRIPTION
---------------------------------
XPTA      | 12      | ASM5
XPTO      | 167     | weird attr
XPTA      | 13      | DBSO12
XPTO      | 6       | gosh...

有没有办法让选择返回这个?

ID | XPTA | XPTO | START_DATE
-----------------------------
1  | 12   | 167  | 01-10-2013
1  | 13   |      | 04-12-2013
2  | 12   |      | 03-09-2015
2  |      | 6    | 05-08-2012

基本上,COL1表示属性,COL2表示从START_DATE开始与ID关联的COL1的id值 示例:资源Mike(ID)从2013年10月1日(START_DATE)开始,ASM5(COL2)的成本资料(COL1)

ideia是按日期为每个ID分组属性。

我看到我能做到的唯一方法是先做选择与TABLE_A不同的start_date 然后对于每个提取的日期做一个从TABLE_A选择ID,COL1,COL2,:date_start其中START_DATE =:date_start 然后以某种方式使COL1值为我的列,COL2为我的值。

1 个答案:

答案 0 :(得分:2)

假设我正确理解了您的问题,那么您正在寻找条件聚合,您可以使用maxcase

select id, 
    max(case when attr_name = 'XPTA' then attr_id end) xpta,
    max(case when attr_name = 'XPTO' then attr_id end) xpto,
    start_date
from table_a 
group by id, start_date