作为另一种方法,当您使用标签标记问题时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