別のアプローチとして、タグで質問にOracle 11g
タグを付けたので、表データのピボットを解除してから、演算子UNPIVOT
とPIVOT
演算子をそれぞれ使用して元に戻すことができます。
select acc_num
, to_char(open_date, 'yyyy/mm/dd') as open_date
, to_char(act_date, 'yyyy/mm/dd') as act_date
, to_char(close_date, 'yyyy/mm/dd') as close_date
from t1
unpivot(
val for col in (open1, close1, activate1)
)
pivot(
max(date1) for (col, val) in ( ('OPEN1',1) as open_date
, ('ACTIVATE1',1) as act_date
, ('CLOSE1',1) as close_date
)
)
結果:
ACC_NUM OPEN_DATE ACT_DATE CLOSE_DATE
---------- ---------- ---------- ----------
200 2013/01/01 2013/01/10 2013/01/12
SQLFIddle デモ
ただし、case
式を使用すると、目的の結果を得る最も簡単な方法になります。
select acc_num
, max(case when open1 = 1 then date1 end) as open_date
, max(case when activate1 = 1 then date1 end) as act_date
, max(case when close1 = 1 then date1 end) as close_date
from t1
group by acc_num