我有这张表:
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为我的值。
答案 0 :(得分:2)
假设我正确理解了您的问题,那么您正在寻找条件聚合,您可以使用max
和case
:
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