oracle中的列到行
Posted
技术标签:
【中文标题】oracle中的列到行【英文标题】:column to row in oracle 【发布时间】:2017-05-22 17:46:04 【问题描述】:我有一张桌子,可以说桌子 T1,桌子上有名字,我想知道 Greg 和 Ammy 在不同时间的位置,比如说早上 6:59 之前,早上 7:00 到 11 点之间:59 PM 和 12:00 PM 之后。但这里有个问题,我想创建一个查询,在名为 6:59 AM、7:00 AM - 11:59 PM、12:00 PM 之后的列中显示纬度和经度。
Table1:
-------------------------------------------------------
| Name | Date | Lattitude | Longitude |
-------------------------------------------------------
| Greg | 2017-05-20T00:05:12 | 24.55 | 60.56 |
| Greg | 2017-05-20T08:05:12 | 28.05 | 59.56 |
| Greg | 2017-05-20T13:05:12 | 20.15 | 61.56 |
| Ammy | 2017-05-20T06:30:10 | 24.55 | 60.56 |
| Ammy | 2017-05-20T11:08:11 | 26.95 | 28.56 |
| Ammy | 2017-05-20T14:00:00 | 20.45 | 15.56 |
-------------------------------------------------------
【问题讨论】:
谷歌甲骨文数据透视 【参考方案1】:你需要先用case语句把每一行归入你描述的3个时间段,例如:
select name, lattitude, longitude,
case when date_tm < '20-MAY-17 07:00:00' then '6:59AM'
when date_tm < '20-MAY-17 12:00:00' then '7:00AM - 11:59PM'
else '12:00PM' end as time_period
from T1.
然后,您可以将行更改为列:
select *
from
(select name, Lattitude||','|| Longitude as lat_long,
case when date_tm < '20-MAY-17 07:00:00' then '6:59AM'
when date_tm < '20-MAY-17 12:00:00' then '7:00AM - 11:59PM'
else '12:00PM' end as time_period
from T1)
PIVOT
(
max(lat_long) for time_period in ('6:59AM','7:00AM - 11:59PM','12:00PM')
);
【讨论】:
以上是关于oracle中的列到行的主要内容,如果未能解决你的问题,请参考以下文章