0

次のようなデータがあります。

t   starttime                 endtime

1   2012-11-13 07:00:00.000   2012-11-13 09:00:00.000
1   2012-11-13 09:00:00.000   2012-11-13 09:15:00.000
2   2012-11-13 09:00:00.000   2012-11-13 16:00:00.000
1   2012-11-13 09:15:00.000   2012-11-13 12:00:00.000
1   2012-11-13 12:30:00.000   2012-11-13 15:00:00.000
1   2012-11-14 07:00:00.000   2012-11-14 09:00:00.000
1   2012-11-14 09:00:00.000   2012-11-14 09:15:00.000
1   2012-11-14 09:15:00.000   2012-11-14 12:00:00.000
1   2012-11-14 12:30:00.000   2012-11-14 15:00:00.000
1   2012-11-15 07:00:00.000   2012-11-15 09:00:00.000
1   2012-11-15 09:00:00.000   2012-11-15 09:15:00.000
1   2012-11-15 09:15:00.000   2012-11-15 12:00:00.000
1   2012-11-15 12:30:00.000   2012-11-15 15:00:00.000

次のように前処理したい:

timestamp               t   x

2012-11-13 07:00:00.000 1   1
2012-11-13 09:00:00.000 1   0
2012-11-13 09:00:00.000 1   1
2012-11-13 09:00:00.000 2   1
2012-11-13 09:15:00.000 1   0
2012-11-13 09:15:00.000 1   1
2012-11-13 12:00:00.000 1   0
2012-11-13 12:30:00.000 1   1
2012-11-13 15:00:00.000 1   0
2012-11-13 16:00:00.000 2   0
2012-11-14 07:00:00.000 1   1
2012-11-14 09:00:00.000 1   0
2012-11-14 09:00:00.000 1   1
2012-11-14 09:15:00.000 1   0
2012-11-14 09:15:00.000 1   1
2012-11-14 12:00:00.000 1   0
2012-11-14 12:30:00.000 1   1
2012-11-14 15:00:00.000 1   0
2012-11-15 07:00:00.000 1   1
2012-11-15 09:00:00.000 1   0
2012-11-15 09:00:00.000 1   1
2012-11-15 09:15:00.000 1   0
2012-11-15 09:15:00.000 1   1
2012-11-15 12:00:00.000 1   0
2012-11-15 12:30:00.000 1   1
2012-11-15 15:00:00.000 1   0

xの値timestampが from starttime( x = 1 ) または from endtime( x = 0 ) であるかどうかを定義する必要があります。私は知っています、それはケーキselectsですunion all

しかし、いくつかの拡張機能で使用できるunpivot()かどうか疑問に思っていますか? 次のように始まりました:

SELECT 
    , UD."timeStamp"
    , UD."t"
    , "isStart"
FROM 
    (
        SELECT 
              "StartTime"
            , "EndTime"
            , "t"
            , < REFERENCE TO STARTTIME OR ENDTIME ? >
        FROM 
            Data 
    ) AS BC
UNPIVOT ( "timeStamp" FOR dummy IN ( "StartTime", "EndTime" )) AS UD

< REFERENCE TO STARTTIME OR ENDTIME ? >timeStamp がどの列から来ているかの情報を提供する必要があります...

4

1 に答える 1

2

このようなものはどうですか、CASEそれにステートメントを適用するだけです:

select timestamp,
  t,
  case when col = 'starttime' then 1 else 0 end x
from yourtable
unpivot
(
  timestamp for col in (starttime, endtime)
) un

デモで SQL Fiddle を参照してください

CASEステートメントを使用しない場合、colフィールドには値starttimeまたはのいずれかが表示されますendtime

結果:

|                       TIMESTAMP | T | X |
-------------------------------------------
| November, 13 2012 07:00:00+0000 | 1 | 1 |
| November, 13 2012 09:00:00+0000 | 1 | 0 |
| November, 13 2012 09:00:00+0000 | 1 | 1 |
| November, 13 2012 09:15:00+0000 | 1 | 0 |
| November, 13 2012 09:00:00+0000 | 2 | 1 |
| November, 13 2012 16:00:00+0000 | 2 | 0 |
| November, 13 2012 09:15:00+0000 | 1 | 1 |
| November, 13 2012 12:00:00+0000 | 1 | 0 |
| November, 13 2012 12:30:00+0000 | 1 | 1 |
| November, 13 2012 15:00:00+0000 | 1 | 0 |
| November, 14 2012 07:00:00+0000 | 1 | 1 |
| November, 14 2012 09:00:00+0000 | 1 | 0 |
| November, 14 2012 09:00:00+0000 | 1 | 1 |
| November, 14 2012 09:15:00+0000 | 1 | 0 |
| November, 14 2012 09:15:00+0000 | 1 | 1 |
| November, 14 2012 12:00:00+0000 | 1 | 0 |
| November, 14 2012 12:30:00+0000 | 1 | 1 |
| November, 14 2012 15:00:00+0000 | 1 | 0 |
| November, 15 2012 07:00:00+0000 | 1 | 1 |
| November, 15 2012 09:00:00+0000 | 1 | 0 |
| November, 15 2012 09:00:00+0000 | 1 | 1 |
| November, 15 2012 09:15:00+0000 | 1 | 0 |
| November, 15 2012 09:15:00+0000 | 1 | 1 |
| November, 15 2012 12:00:00+0000 | 1 | 0 |
| November, 15 2012 12:30:00+0000 | 1 | 1 |
| November, 15 2012 15:00:00+0000 | 1 | 0 |
于 2012-11-14T10:50:39.933 に答える