1

我需要帮助...例如我有这张桌子..

acc_num   open  close  activate    date
-------   ----  -----  --------   ----------
 200        1     0        0      2013/01/01
 200        0     1        0      2013/01/12
 200        0     0        1      2013/01/10

输出应该是:

acc_num   open_date   act_date    close_date
 200     2013/01/01   2013/01/10  2013/01/12

谢谢你的帮助

4

3 回答 3

2

试试这个(假设每个 acc_num 每个状态只有一行):

select acc_num, 
max(decode(open,1,date)) open_date,
max(decode(close,1,date)) close_date,
max(decode(activate,1,date)) activate_date
from table
group by acc_num
于 2013-08-26T20:31:52.007 回答
1

您可以使用一系列CASE语句来创建所需的列。

这是一个样本小提琴

SELECT  t1.acc_num
        ,MAX(CASE WHEN t1.open = 1 THEN t1.date ELSE TO_DATE('1901-01-01', 'YYYY-DD-MM') END) AS Open_Date
        ,MAX(CASE WHEN t1.activate = 1 THEN t1.date ELSE TO_DATE('1901-01-01', 'YYYY-DD-MM') END) AS Activate_Date
        ,MAX(CASE WHEN t1.close = 1 THEN t1.date ELSE TO_DATE('1901-01-01', 'YYYY-DD-MM') END) AS Close_Date
FROM    YourTable t1
GROUP BY
        t1.acc_num    
于 2013-08-26T20:34:20.960 回答
1

作为另一种方法,当您使用标签标记问题时Oracle 11g,您可以取消透视表数据,然后分别使用UNPIVOTPIVOT运算符将它们转回:

    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
于 2013-08-26T21:00:20.140 回答