我知道这个语句的确是过分了点,呵呵,不过,我现在想不到更好的办法呀,现在的数据已经是从试图中取的了,也就是上面查询的vwProduce_Report表是一个视图。由于数据库设计上的原因使数据太分散了,没有办法,连接可能不行,因为他现在的数据库设计如果用连接查询不管查不查得出,语句写出来后也会长得吓死人,可能效率更底。用临时表能有多大的性能提升呢,用存储过程呢?是在ASP程序中。

解决方案 »

  1.   

    仔细看了一下,根本没必要用子查询:
    SELECT a.strMoNo, a.strLineID, b.strModelName, COUNT(a.strMoNo) AS InputCount, 
    sum(case when a.SMTINPUTA BETWEEN '2004/9/5 8:30:0' AND '2004/9/5 10:30:0' then 1 else 0 end) AS SMTINPUTA, 
    sum(case when a.SMTOUTPUTA BETWEEN '2004/9/5 8:30:0' AND '2004/9/5 10:30:0' then 1 else 0 end) AS SMTOUTPUTA, 
    ......
    FROM vwProduce_Report a INNER JOIN tblSFIS_SI_KeyPartProgram b ON a.strMoNo = b.strMONo WHERE (a.Input_Time BETWEEN '2004/9/5 8:30:0' AND '2004/9/5 10:30:0' ) GROUP BY a.strMoNo, a.numProgramID, b.strModelName, a.strLineID
      

  2.   

    pbsql(风云) 厉害,这样的确速度快多了,不好意思,想再问一下,这句应该如何改呢?
    SELECT COUNT(DISTINCT strMainID) FROM tblSFIS_SI_Repair WHERE numProgramID=a.numProgramID AND strFail_Location = 'OQC' AND (dt_Fail BETWEEN '2004/9/5 8:30:0' AND '2004/9/5 10:30:0')) AS OQC_Repair