Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server CTE与非确定性函数的分组_Sql Server_Common Table Expression - Fatal编程技术网

Sql server CTE与非确定性函数的分组

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

我已经读到使用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())
ORDER BY DateDiff(D,H.OrderDate,GETDATE())
这似乎是不对的,因为
GETDATE()
是不确定的

所以有两个问题:

  • 任何人都知道这个例子为什么有效,但似乎不应该
  • 有没有人有一个CTE有帮助的类似查询的好例子
  • 克服“非决定性功能的群体”限制


    谢谢

    我没有看到任何CTE,因此不确定与示例有何关联。CTE只是一种编写子查询的好方法,因此易于阅读,但非递归CTE和子查询之间并没有什么区别<代码>声明@now datetime=getdate()。在一个耗时的查询中,getdate()可能会在它
    分组依据
    排序依据
    @AlexKudryashev时发生变化,这是不正确的。GETDATE()将为任何单个查询返回完全相同的值。引擎不会在单个查询中反复重新计算该函数。在一个过程中,语句之间会有所不同,但在一个查询中不会。编写自己的示例非确定性函数需要多长时间?每一个带有“CTE”的例子看起来都和一个带有神奇的“子查询”功能的例子完全一样@如果我没有弄错的话,那从2005年起就不是真的了。所以我从2005年起就记得这个问题,从那时起就没有考虑过这个问题;(