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 ごとに州ごとに 1 つの行しかないと仮定します):

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 に答える