小编coh*_*ena的帖子

交叉应用聚合

CROSS APPLY带有聚合函数的a 是否返回一行,即使内部表达式没有结果?

我正在使用Sql Server 2012.

大多数情况下,当我有一个需要我通常使用的派生表的查询时CROSS APPLY.我认为这是更好的性能,同样,我可以访问外部表,所以我可以为每个连接的行执行TOP n等.

今天我遇到了一个非常有趣的交叉应用行为,在我看来它似乎是一个bug.

我试图在某些桌子上进行聚合,但我也需要细节.所以我编写了没有任何聚合的查询然后,我尝试了交叉应用来总结应用表Id等于外表的id.

据我所知,如果内部表没有返回任何内容,那么外部表也不会(CROSS APPLYvs OUTER APPLY),而且当我不使用聚合时就是这种情况,但是当我使用该COUNT函数时,即使内部也是如此表不返回任何内容.我尝试使用简单的临时表(参见代码),令人惊讶的是我得到了相同的结果.

如果我这样做,GROUP BY它工作正常.

CREATE TABLE #SampleParent (Id INT PRIMARY KEY IDENTITY, ParentName VARCHAR(25))

CREATE TABLE #SampleChildren (Id INT PRIMARY KEY IDENTITY, ParentId INT, ChildName VARCHAR(25))

INSERT INTO #SampleParent
(   ParentName )
VALUES ('Bob')

SELECT * 
FROM #SampleParent AS sp
CROSS APPLY (SELECT sc.ChildName FROM #SampleChildren AS sc WHERE sc.ParentId = sp.Id) c
WHERE sp.Id = …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

6
推荐指数
1
解决办法
1285
查看次数

标签 统计

sql ×1

sql-server ×1

sql-server-2012 ×1

t-sql ×1