2014-03-06 55 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