【发布时间】: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