-1

手動で作成したスプレッドシートを SQL レポートに変換する必要があります。レポートは、Oracle Forms (BI Suite アプリの 1 つ) を介して生成されます。

「リクエスト番号」で識別される、多くのチケットが届く受信ボックスがあります。

各リクエスト番号は、システム内のヘルプ デスク チケットです。そのスプレッドシートのスクリーンショットを次に示します。

ここに画像の説明を入力

列の完全なリスト (説明付き) :

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 スクリプトを使用して、その一部またはすべてを生成することです。

私の問題の 1 つは、.. 特定の「リクエスト番号」に対して、データベース内に冗長で競合するデータが頻繁に取得されることです。

以下は、これまでの私のクエリです。

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 テーブルにインポートして、そこで試すことができる場合があります。

もちろん、TommCatt が指摘したような、より高度なソリューションは他にもあります。

于 2015-03-18T05:26:41.203 に答える
1

問題を再現するサンプル テーブル (行数が少ない) がなければ、診断は困難です。
重複データは間違った結合から来ていると思います。
クエリから完全に削除しようとすることもできhhs_umx_resp_activityます (それが使用されている場所にコメントしたようです)。
次に、それが続く場合は、結合に関連しているhhs_umx_reg_requests必要があります (追加の列に結合するか、この結合を別のものに置き換えることができる場合がありますouter apply)。

于 2015-05-12T16:14:29.773 に答える