Sql server CTE与非确定性函数的分组
我已经读到使用CTE的一个很好的理由是,正如微软所说: 启用按从标量子选择派生的列进行分组, 或者是一个不确定的或具有外部访问权限的函数 因此,我使用SQL 2014和Adventure Works 2012 DB尝试了这个示例,它成功了Sql server CTE与非确定性函数的分组,sql-server,common-table-expression,Sql Server,Common Table Expression,我已经读到使用CTE的一个很好的理由是,正如微软所说: 启用按从标量子选择派生的列进行分组, 或者是一个不确定的或具有外部访问权限的函数 因此,我使用SQL 2014和Adventure Works 2012 DB尝试了这个示例,它成功了 SELECT DateDiff(D,H.OrderDate,GETDATE()), Count(*) FROM Sales.SalesOrderHeader H GROUP BY DateDiff(D,H.OrderDate,GETDATE()) ORDE
SELECT DateDiff(D,H.OrderDate,GETDATE()), Count(*)
FROM Sales.SalesOrderHeader H
GROUP BY DateDiff(D,H.OrderDate,GETDATE())
ORDER BY DateDiff(D,H.OrderDate,GETDATE())
这似乎是不对的,因为GETDATE()
是不确定的
所以有两个问题:
谢谢 我没有看到任何CTE,因此不确定与示例有何关联。CTE只是一种编写子查询的好方法,因此易于阅读,但非递归CTE和子查询之间并没有什么区别<代码>声明@now datetime=getdate()。在一个耗时的查询中,getdate()可能会在它
分组依据
和排序依据
@AlexKudryashev时发生变化,这是不正确的。GETDATE()将为任何单个查询返回完全相同的值。引擎不会在单个查询中反复重新计算该函数。在一个过程中,语句之间会有所不同,但在一个查询中不会。编写自己的示例非确定性函数需要多长时间?每一个带有“CTE”的例子看起来都和一个带有神奇的“子查询”功能的例子完全一样@如果我没有弄错的话,那从2005年起就不是真的了。所以我从2005年起就记得这个问题,从那时起就没有考虑过这个问题;(