【问题标题】:Create and Join Temporary Tables创建和连接临时表
【发布时间】:2019-01-09 22:14:32
【问题描述】:

我正在寻找一些帮助来连接两个临时表以获得最终输出。

我必须创建不同的表,一个来计算花费的时间,另一个来计算总和

很遗憾,我无法在一张表中执行此操作,因为有很多重复的时间值导致计算错误。

下面是代码:


CREATE TABLE KPI_REPORT (
    USERNAME      CHAR(50),
    HOURS         NUMBER(10),
    MINUTES       NUMBER(10),
    TOTAL_CTN     NUMBER(10),
    AVERAGE_CTN   NUMBER(10)
);

CREATE TABLE TOTAL_TIME (
    USERNAME   CHAR(50),
    HOURS      NUMBER(10),
    MINUTES    NUMBER(10)
);

CREATE TABLE TOTAL_CARTONS (
    USERNAME    CHAR(50),
    TOTAL_CTN   NUMBER(10)
);
    INSERT INTO Total_Time ( Username, Hours, Minutes )
    select 
        ia.username --username
        ,ROUND( SUM( ia.dtime3-ia.dtime1 ) * 24,2 ) --hours
        ,ROUND( SUM( ( ia.dtime3-ia.dtime1 ) * 24 ) * 60,2 ) --minutes
    from 
        actual_db_1 ia
    where 
        to_char( ia.dtime3, 'YYYY-MM-DD' ) between '2019-01-08' and '2019-01-08'
        and ia.site = '7'
        and ia.from_location = 'ORDERPICK'
        and ia.queue like 'LL%'
    group by
        ia.username;

    COMMIT;

    INSERT INTO Total_Cartons ( Username, Total_Ctn )
    select
        ia.USERNAME --username
        ,SUM( pm.qty/pm.packfactor_1 ) --cartons
    from 
        actual_db_1 ia, 
        actual_db_2 pm
    where 
        to_char( ia.dtime3, 'YYYY-MM-DD' ) between '2019-01-08' and '2019-01-08'
        and ia.site = '7'
        and ia.queue like 'LL%'
        and pm.code = product
    group by 
        ia.username;

    COMMIT;

    INSERT INTO KPI_Report ( Username, Hours, Minutes, Total_Ctn, Average_Ctn )

    select
        Total_Time.Username
        ,Total_Time.Hours
        ,Total_Time.Minutes
        ,Total_Cartons.Total_Ctn
        ,ROUND( ( SUM( ia.qty/pm.packfactor_1 ) )  / ( SUM( ia.dtime3-ia.dtime1) * 24 ),2 )
    from 
        Total_Time
        ,Total_Cartons
    where 
        Total_Time.Username = Total_Cartons.Username 
    group by
       Total_Time.Username 
       ,Total_Time.Hours
       ,Total_Time.Minutes
       ,Total_Cartons.Total_Ctn
    order by
        ia.username;

    COMMIT;

感谢任何帮助,因为我被困住了。

【问题讨论】:

  • 中间表会带来很高的磁盘读写开销。 (因为这些不是真正的临时表,所以在重用之前清除持久记录的额外开销。)您是否测试过仅查询基础表并加入结果集?
  • 除此之外,您应该发布一些示例输入数据和示例输出,即从示例派生的KPI_Report 的所需内容。

标签: sql oracle temp-tables


【解决方案1】:

您必须,添加表actual_db_1actual_db_2 进行查询

CREATE TABLE KPI_REPORT (
    USERNAME      CHAR(50),
    HOURS         NUMBER(10),
    MINUTES       NUMBER(10),
    TOTAL_CTN     NUMBER(10),
    AVERAGE_CTN   NUMBER(10)
);

CREATE TABLE TOTAL_TIME (
    USERNAME   CHAR(50),
    HOURS      NUMBER(10),
    MINUTES    NUMBER(10)
);

CREATE TABLE TOTAL_CARTONS (
    USERNAME    CHAR(50),
    TOTAL_CTN   NUMBER(10)
);
    INSERT INTO Total_Time ( Username, Hours, Minutes )
    select 
        ia.username --username
        ,ROUND( SUM(ia.dtime3-ia.dtime1 ) * 24,2 ) --hours
        ,ROUND( SUM( ( ia.dtime3-ia.dtime1 ) * 24 ) * 60,2 ) --minutes
    from 
        actual_db_1 ia
    where 
        to_char( ia.dtime3, 'YYYY-MM-DD' ) between '2019-01-08' and '2019-01-08'
        and ia.site = '7'
        and ia.from_location = 'ORDERPICK'
        and ia.queue like 'LL%'
    group by
        ia.username;

    COMMIT;

    INSERT INTO Total_Cartons ( Username, Total_Ctn )
    select
        ia.USERNAME --username
        ,SUM( pm.qty/pm.packfactor_1 ) --cartons
    from 
        actual_db_1 ia, 
        actual_db_2 pm
    where 
        to_char( ia.dtime3, 'YYYY-MM-DD' ) between '2019-01-08' and '2019-01-08'
        and ia.site = '7'
        and ia.queue like 'LL%'
        and pm.code = product
    group by 
        ia.username;

    COMMIT;

    INSERT INTO KPI_Report ( Username, Hours, Minutes, Total_Ctn, Average_Ctn )

    select
        Total_Time.Username
        ,Total_Time.Hours
        ,Total_Time.Minutes
        ,Total_Cartons.Total_Ctn
        ,ROUND( ( SUM( ia.qty/pm.packfactor_1 ) )  / ( SUM( ia.dtime3-ia.dtime1) * 24 ),2 )
    from 
        Total_Time
        INNER JOIN Total_Cartons ON Total_Time.Username = Total_Cartons.Username
        INNER JOIN actual_db_1 ia ON ia.username = Total_Time.Username
        INNER JOIN actual_db_2 pm ON ia.product = pm.code

    group by
       Total_Time.Username 
       ,Total_Time.Hours
       ,Total_Time.Minutes
       ,Total_Cartons.Total_Ctn
    order by
        ia.username;

    COMMIT;

【讨论】:

  • 当然,OP 使用中间表 Total_TimeTotal_Cartons 的目的是避免引用实际表。这对他们有什么帮助?
猜你喜欢
  • 2010-11-21
  • 2017-12-31
  • 2017-06-03
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2021-05-12
  • 1970-01-01
相关资源
最近更新 更多