You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中拆分重复行时实现列值相减并重置列值的技术求助

Solution for Calculating Time Difference and Splitting Rows

我来帮你搞定这个需求!你需要先计算WORKING_TIME_MINS - TRAVEL_TIME_MINS得到净工作时间,再把记录拆分成两行,分别展示净工作时间(旅行时间置0)和旅行时间(工作时间置0)。可以通过以下SQL实现:

SELECT 
    EMPLOYEE_ID,
    -- 第一行显示净工作时间(原工作时间减旅行时间),旅行时间设为0
    CASE WHEN seq = 1 THEN WORKING_TIME_MINS - TRAVEL_TIME_MINS ELSE 0 END AS WORKING_TIME_MINS,
    -- 第二行显示原始旅行时间,工作时间设为0
    CASE WHEN seq = 2 THEN TRAVEL_TIME_MINS ELSE 0 END AS TRAVEL_TIME_MINS,
    UNIQUE_JOB_NO
FROM CONNECT_BY_LVL_EXAMPLE_2,
(
    -- 生成两行标记,分别对应工作时间行和旅行时间行
    SELECT 1 AS seq FROM DUAL
    UNION ALL
    SELECT 2 AS seq FROM DUAL
)
-- 只处理有旅行时间的记录,避免为无旅行时间的记录生成多余行
WHERE TRAVEL_TIME_MINS > 0;

代码解释

  1. 生成行标记:用UNION ALL创建一个包含seq=1和seq=2的临时数据集,用来控制拆分出的两行数据。
  2. 条件赋值:通过CASE语句根据seq的值分别计算列值:
    • 当seq=1时,WORKING_TIME_MINS取差值,TRAVEL_TIME_MINS置为0
    • 当seq=2时,WORKING_TIME_MINS置为0,TRAVEL_TIME_MINS保留原始值
  3. 过滤无效记录:WHERE TRAVEL_TIME_MINS > 0确保只有存在旅行时间的记录才会被拆分,避免生成不必要的空行。

执行结果

运行上述SQL后,你会得到期望的输出:

EMPLOYEE_IDWORKING_TIME_MINSTRAVEL_TIME_MINSUNIQUE_JOB_NO
123456789110VP25
123456789062VP25

内容的提问来源于stack exchange,提问作者Michael Owen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:47:26