-1

我需要将手动创建的电子表格转换为 SQL 报告。该报告是通过 Oracle Forms(BI Suite 应用程序之一)生成的。

有一个收件箱,其中有许多票,由“请求号”标识

每个请求编号都是系统中的帮助台票证。这是该电子表格的屏幕截图:

在此处输入图像描述

列的完整列表(带描述):

Request No. 
Modules
Submitted ( the request being submitted , a timestamp )
Supervisor ( the request being approved , by supervisor )
Average Supervisor Approval Duration
Responsibility
Average Resp. Approval Duration
Training (the request being approved for completing training)
Average Training Approval Duration - 
Configuration - depending on whether its PRISM or iProcurement
Average Config. Approval Duration
Approved
Total Overall Duration
Security 
Average Security  Approval Duration
SOD 
Avg SOD Approval Duration

所以我想要做的是使用 SQL 脚本生成其中的部分或全部。

我的一个问题是……对于特定的“请求编号”,我经常会在数据库中获得冗余和冲突的数据。

以下是我到目前为止的查询。

SELECT   hur.reg_request_id AS "Request No", 
     RESPONSIBILITY_NAME AS "Module", 
     to_char(hur.creation_date, 'DD-Mon-YYYY HH24:MI:SS') AS "Submitted" ,  
     to_char(hur.last_update_date,    'DD-Mon-YYYY HH24:MI:SS') AS "Supervisor" ,     
     ROUND((hur.last_update_date - hur.creation_date), 3 ) || 
           ' days' AS "Avg Supervisor Appr Duration" ,          
     /* hura.creation_date AS "Responsibility" */, 
     NULL AS "Avg Resp Appr Duration", NULL AS "Training",     
     NULL AS "Avg Training Appr Duration" , 
     hur.LAST_UPDATE_DATE AS "Security", 
     NULL AS "Avg Security Appr Duration",     
     NULL AS "SOD", 
     NULL AS "Average SOD Approval Duration" , 
     NULL AS "Configuration",      
     NULL AS "Avg Config Appr Duration",       
     hurr.last_update_date AS "Approved", 
     ROUND( hurr.last_update_date - hur.creation_date, 2 )  
              AS  "Total Overall Duration",     
     NULL AS "Notes"           

     FROM HHS_UMX_REG_SERVICES hur     
        JOIN fnd_responsibility_vl frt 
          ON (hur.responsibility_id = frt.responsibility_id and
              hur.responsibility_application_id = frt.application_id)
    JOIN 
         hhs_umx_reg_requests hurr ON 
           (hurr.reg_request_id = hur.reg_request_id )

       /* JOIN hhs_umx_resp_activity  hura */
      left outer JOIN 
          hhs_umx_resp_activity  
          hura ON (hur.reg_request_id = hura.reg_request_id )--ADD ON 

      WHERE EXISTS (
          SELECT  NULL  FROM hhs_umx_resp_activity hura
      WHERE hura.created_by = hur.created_by 
          AND
      hura.creation_date > hur.creation_date)
          AND hur.reg_request_id IN 
           ('263428', '263458', '263473', 
            '264717', '263402', '263404', 
            '262671', '263229', '263268')                        
      ORDER BY hur.reg_request_id ASC

以下是架构:

HHS_UMX_RESP_ACTIVITY 在此处输入图像描述

HHS_UMX_REG_SERVICES 在此处输入图像描述

fnd_responsibility_vl

在此处输入图像描述

**hhs_umx_reg_requests **

在此处输入图像描述

谢谢

4

3 回答 3

4

作为一个简单的解决方案,您可以在 SQL 命令中创建将列添加在一起的行。诸如“INSERT INTO TABLE ('REQ_NO', 'MODULE') VALUES (A2, B2)”之类的东西。然后你可以使用excel函数为每一行一次又一次地复制它。

另一个简单的解决方案是将电子表格保存为 CSV(使用确切的 CSV 格式来查看适合您的格式),然后您可以将其导入您的 SQL 表并在那里进行操作。

当然还有其他更高级的解决方案,比如 TomCatt 指出的。

于 2015-03-18T05:26:41.203 回答
3

我已经用 Perl 做过很多次了。有用于读取电子表格的软件包,因此只需编写脚本即可生成所需的插入语句。然后只需将其写入一个漂亮的 .SQL 文本文件,然后可由 SQL Developer 或您使用的任何 IDE 执行。或者直接从 Perl 脚本执行它。

于 2015-03-18T05:18:42.207 回答
1

如果没有样本表(只有几行)重现问题,就很难诊断。
我认为您的重复数据来自错误的连接。
您可以尝试hhs_umx_resp_activity从查询中完全删除(我看到您评论了使用它的地方)。
然后,如果它继续,它必须与加入相关hhs_umx_reg_requests(您可能能够加入一个额外的列或用其他东西替换这个加入,outer apply例如)。

于 2015-05-12T16:14:29.773 回答