我遇到了这样的查询:
SELECT (SELECT COUNT(1) FROM Orders o WHERE i.ItemId = o.ItemId) [C]
FROM Items i
Run Code Online (Sandbox Code Playgroud)
我将其更改为以下
;WITH cte_count
AS
(
SELECT COUNT(1) c, OrderId FROM Orders Group By ItemId
)
SELECT a.c [Count], i.Name
FROM Items i
INNER JOIN cte_count c ON (c.ItemId = i.ItemId)
Run Code Online (Sandbox Code Playgroud)
但两者的执行计划如下所示:

同样,还有另一个查询选择TOP 1 Order By Id. 我尝试将这个移动到CROSS APPLY但是对于这个,我也得到了相同的执行计划。

当然,查询中还有其他连接和列。
我的困境是关于使用CROSS APPLYand 的实用性和优势CTE。有没有或只是异国情调?