首页 > 解决方案 > SQL Server:为没有游标或函数的每条记录运行单独的 CTE

问题描述

给定具有一列LocationID和许多记录的表 A,

是否可以在不使用游标(while fetch 循环)或函数(通过交叉应用)的情况下为每条记录完全运行 CTE?

我无法从表 A 运行 CTE,因为 CTE 将深入通过父子层次表(ParentID、ChildID)来查找表 A 的每个 LocationID 的特定类型的所有后代。似乎如果我使用表A做CTE,它将混合表A中所有LocationID的孩子。

基本上我需要为表 A 的每个 LocationID 单独运行一个 CTE,并放入一个包含 LocationID 和 ChildID 列的表(LocationID 是表 A 中的那些,而 ChildID 都是通过 CTE 找到的特定类型的后代)。

标签: sql-servercommon-table-expressionsql-functioncross-apply

解决方案


这是您的基本布局。

;with CTE AS
(
   select .......
)

select *
from CTE
cross apply (select distinct Location from TableA) a
where CTE.Location=a.Location

一些样本数据和预期结果将提供更好的答案。


推荐阅读