2012-07-31 207 views
0

尋找一種更好的方式來編寫這個查詢,我的SQL技能並不是很好,基本上真的是在尋找任何使這個更好的指針。這只是前兩列,完整的報告將有更多的10。SQL查詢需要很長時間才能返回數據

我正在採取一組特定的修復類型,並使用計數和計算對它們進行分析。第一項是提供到本財政年度的工作,第二項是目前收到的工作總量。

SELECT 
    "Type", 
    (
     SELECT 
      NVL (COUNT(jjo.jjobno), 0) 
     FROM 
      jjobh jjo 
     WHERE 
      jjo.jclcode = 'L' 
     AND jjo.jstatus <> '6' 
     AND jjo.year_rec <> (
      SELECT 
       sub_code 
      FROM 
       code_table 
      WHERE 
       main_code = 'YEAR' 
     ) 
     AND (
      week_comp IS NULL 
      OR year_comp = (
       SELECT 
        sub_code 
       FROM 
        code_table 
       WHERE 
        main_code = 'YEAR' 
      ) 
     ) 
     AND jjo.jrepair_type = "Type" 
    ) AS "B/F", 
    (
     SELECT 
      NVL (COUNT(jjo.jjobno), 0) 
     FROM 
      jjobh jjo 
     WHERE 
      jjo.jclcode = 'L' 
     AND jjo.jstatus <> '6' 
     AND jjo.year_rec = (
      SELECT 
       sub_code 
      FROM 
       code_table 
      WHERE 
       main_code = 'YEAR' 
     ) 
     AND jjo.jrepair_type = "Type" 
    ) AS "Recvd" 
FROM 
    (
     SELECT 
      rep.repair_type_code AS "Type" 
     FROM 
      repair_type rep 
     WHERE 
      rep.client = 'L' 
     AND rep.work_centre = '004682' 
     ORDER BY 
      rep.repair_type_code 
    ) 
ORDER BY 
    "Type"; 
+3

你可以看看的一件事是用連接替換你的許多子查詢。這應該大大加快您的查詢。 – Jacob 2012-07-31 10:26:50

+0

謝謝,我會看看。 – tookiebunten 2012-07-31 10:50:01

+0

表「code_table」是否有重複的條目 – shajivk 2012-07-31 11:05:38

回答

0

你的代碼是一團糟。我懷疑你想要的東西,如:

SELECT jjo.jrepair_type, count(*) as valbf 
FROM (SELECT coalesce(COUNT(jjo.jjobno), 0) 
     FROM jjobh jjo cross join 
      (SELECT sub_code 
      FROM code_table 
      WHERE main_code = 'YEAR' 
      ) sc 
     WHERE jjo.jclcode = 'L' AND 
      jjo.jstatus <> '6' AND 
      jjo.year_rec <> sc.sub_code AND 
      (week_comp IS NULL OR 
      year_comp = sc.sub_code 
      ) 
    ) jjo join 
    (SELECT rep.repair_type_code AS "Type" 
     FROM repair_type rep 
     WHERE rep.client = 'L' AND 
      rep.work_centre = '004682' 
    ) rtc 
    on jjo.jrepair_type = rtc.repair_type_code 
group by jjo.jrepair_type; 

它看起來像你想加入「jjo」表「修復類型代碼」表,生產約每修復類型的信息。子查詢中的順序是無用的。

我的建議是將「jjo」表移動到外部的「from」。您還應該將WHERE子句移到最外面的WHERE子句中(我沒有這樣做)。我還沒有弄清楚日期邏輯,但是這可能會讓你走上正軌。

+0

戈登是的,這是正確的_「它看起來像你想加入」jjo「表」修復鍵入代碼「表,生成關於每種修復類型的信息」_我會隨着您的建議一起去,並讓您知道。我現在開始意識到我的SQL技能有多弱。謝謝 – tookiebunten 2012-07-31 14:50:53

相關問題