2014-03-06 53 views
0

如果可能,我想簡化這個查詢。簡化T-SQL查詢

SELECT 
    MAX(tDateTimeOfSurvey) 
FROM 
    Stocks.dbo.tblSurvey 
WHERE 
    ( 
     (SELECT ISNULL(SUM(tWetTons), 0) 
     FROM Stocks.dbo.tblSurvey 
     WHERE tStockAreaID = 3 
      AND tDateTimeOfSurvey BETWEEN '20140201' AND '20140228') + 
     (SELECT ISNULL(SUM(tWetTons), 0) 
     FROM Stocks.dbo.tblSurvey 
     WHERE tStockAreaID = 103 
     AND tDateTimeOfSurvey BETWEEN '20140201' AND '20140228') + 
     (SELECT ISNULL(SUM(tWetTons), 0) 
     FROM Stocks.dbo.tblSurvey 
     WHERE tStockAreaID = 181 
     AND tDateTimeOfSurvey BETWEEN '20140201' AND '20140228') 
    ) > 0 
AND tStockAreaID IN (3,103,181) -- RAS, SOIL, DORB 
AND tDateTimeOfSurvey BETWEEN '20140201' AND '20140228' 

非常感謝,皮埃爾

+0

請分享您的DDL的表,一些樣本數據和樣本結果解釋你想達到什麼目的? – Mureinik

+0

你到目前爲止嘗試過什麼?你簡化的目標是什麼?也就是說,您是否遇到性能問題或結果不正確? –

+0

這似乎微不足道 - 爲什麼有三個子查詢,當你只有一個'tStockAreaID在(3,103,181)'? –

回答

1

請嘗試:

SELECT MAX(tDateTimeOfSurvey) 
FROM Stocks.dbo.tblSurvey 
WHERE 
    tStockAreaID IN (3,103,181) AND 
    tDateTimeOfSurvey BETWEEN '20140201' AND '20140228' 
HAVING SUM(tWetTons)>0 
+0

是@StuartLC謝謝:) – TechDo