在pivot查询中重命名列名,并将其时间值的格式设置为hh:mm:ss

trnvg8h3  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(271)

我正在准备一份报告,我需要在第2栏中列出各个过程所用的时间总和。
我正在分享一个我无法理解的小片段。下面是查询。

SELECT DISTINCT *
FROM CTE_NAME
PIVOT ( SUM(TIME) FOR ACTIVITY IN ( NULL
,Process 1
,Process 2
    )
) order by 2 desc


未来的事情noted:-
hours\u diff是在此共享代码段上方的cte表达式中计算的值
时差 date 类型。
未来的事情done:-
必须更改列名 NULLTOTAL_TIME 需要转换 TIMEHH:MM:SS 我有的东西tried:-
我试过用 SUM(TIME) AS TOTAL_TIME ... 好像不管用。在那之后我也试着换了 NULLTOTAL_TIME 但它在某种程度上改变了 TIME 价值观 Process 1 转向第二列。
以转换时间值(以秒为单位)。我以前用过这个 TO_CHAR(TRUNC(sec_diff/3600),'FM9900') || ':' || TO_CHAR(TRUNC(MOD(sec_diff,3600)/60),'FM00') || ':' || TO_CHAR(MOD(sec_diff,60),'FM00') as time_diff . 但由于我无法从上面的代码片段中获取列,因此无法将值转换为 HH:MM:SS 如果我把 TIME cte内部 SUM 中的函数 SELECT 查询抛出错误 Invalid Number 因为传递给sum函数的值的格式是 HH:MM:SS

gijlo24d

gijlo24d1#

为了给列命名,可以在中提供名称 IN 列表 PIVOT 具体如下:

SELECT DISTINCT *
FROM CTE_NAME
PIVOT ( SUM(TIME) FOR ACTIVITY
 IN ( NULL as TOTAL_TIME, -- THIS
,Process 1
,Process 2
    )
) order by 2 desc;

计算 HH:MI:SS 从秒开始,在选择中使用它。(在diff小于86400(1天)的情况下工作秒)

TO_CHAR(TRUNC(SYSDATE) + INTERVAL '1' SECOND * YOUR_COLUMN_SECONDS, 'HH24:MI:SS')

或者跟随会有更大的价值

Lpad(Trunc(your_column_seconds/86400),2,'0') 
|| ':' || 
Lpad(Trunc(your_column_seconds/1440),2,'0') 
|| ':' || 
Lpad(Trunc(your_column_seconds/60),2,'0')

注意:上述表达式中应使用pivot生成的秒差的列名。

相关问题