【问题标题】:Simplify T-SQL Query简化 T-SQL 查询
【发布时间】:2014-03-06 20:00:50
【问题描述】:

如果可能,我想简化这个查询。

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' 

非常感谢,皮埃尔

【问题讨论】:

  • 请分享您的表格 DDL、一些示例数据和示例结果,说明您要实现的目标?
  • 到目前为止你尝试过什么?您简化的目标是什么?也就是说,您是否遇到性能问题或不正确的结果?
  • 这似乎微不足道 - 为什么有三个子查询,而 tStockAreaID in (3,103,181) 可以只有一个?

标签: sql-server tsql optimization


【解决方案1】:

请尝试:

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

【讨论】:

  • 是的@StuartLC 谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多