相同查询上的不同Group By子句(Select/Where)

ari*_*iel 1 sql group-by query-optimization sql-server-2008

我可以重复使用复杂的选择Where子句到不同的组吗?

我在做什么:

(Select X, Count(*) From [Big where clause with many tables] Group By X)
Union All
(Select Y, Count(*) From [Big where clause with many tables] Group By Y)
Run Code Online (Sandbox Code Playgroud)

我怎么能选择这个呢?

我正在使用SQL Server 2008,这将进入一个函数,但可能是一个存储过程.

And*_*rus 5

WITH basequery AS (Select * From [Big where clause with many tables])
SELECT X, COUNT(*) FROM basequery GROUP BY X
UNION ALL
SELECT Y, COUNT(*) FROM basequery GROUP BY Y;
Run Code Online (Sandbox Code Playgroud)

CTE是针对这种情况而制作的.

  • @ariel不确定您在问题中引用的"优化"是代码还是性能?作为性能优化,其效果将是中性的.它将重用查询定义,但不重用工作.CTE仍会被评估两次,计划可能与原始查询相同. (2认同)