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中的列到行的主要内容,如果未能解决你的问题,请参考以下文章

在oracle SQL中将行移动到列和列到行

T-SQL 中的列到行

具有不同日期的列到行

如何获得解码/未透视行的唯一计数(列到行)

XLSX 从 blob 列到 Oracle 表

多列,多表列到行 unpivot