Reputation: 1197
i have some data like:
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
and want to get it preprcessed like:
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
should define, if value of timestamp
is from starttime
( x = 1 ) or from endtime
( x = 0 ).
i know, it's piece of cake, using two selects
with an union all
.
but i'm wondering if it is possible using unpivot()
with some extensions?
started like:
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 ? >
should give the information, from which column timeStamp comes from...
Upvotes: 0
Views: 80
Reputation: 247670
How about something like this, just apply a CASE
statement to it:
select timestamp,
t,
case when col = 'starttime' then 1 else 0 end x
from yourtable
unpivot
(
timestamp for col in (starttime, endtime)
) un
If you don't use the CASE
statement the col
field just displays either the value starttime
or endtime
.
Result:
| 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 |
Upvotes: 2