【发布时间】:2015-01-26 13:09:40
【问题描述】:
是否有一些棘手的方法来 GROUP BY 已由别名定义的变量或计算结果?我认为以下代码通过在 Select 语句中计算 MyMonth 然后在 Group 语句中再次计算来实现双重下降。这可能是不必要的浪费。简单的GROUP BY MyMonth 是不可能的。是否可以只强制计算一次month([MyDate])?
代码更新。添加聚合函数。
SELECT month([MyDate]) AS MyMonth, count([MyDate]) AS HowMany
FROM tableA
WHERE [MyDate] BETWEEN '2014-01-01' AND '2014-12-31'
GROUP BY month([MyDate])
ORDER BY MyMonth
【问题讨论】:
-
您确定要计算两次吗?我认为优化器可以认识到,尽管您声明了两次操作,但只需要执行一次。查看查询计划以了解它实际在做什么以及缓存了哪些元素。
-
仅供参考 - 这就是为什么您不能在“where”子句中使用别名的原因:bennadel.com/blog/70-sql-query-order-of-operations.htm
标签: sql sql-server-2008