with进行递归表

WITH RBoardDiscuss_Table(OpenBoardDiscussID,AssociateItemDefinitionID,AssociateItemID) AS(SELECT OpenBoardDiscussID,AssociateItemDefinitionID,AssociateItemID FROM RBoardDiscuss WHERE OpenBoardDiscussID = 549 UNION ALL SELECT a.OpenBoardDiscussID,a.AssociateItemDefinitionID,a.AssociateItemID FROM RBoardDiscuss A INNER JOIN RBoardDiscuss_Table B ON A.AssociateItemID = B.OpenBoardDiscussID) SELECT op.OpenBoardDiscussID,op.Content,op.WriterID,op.ReceiverID,op.CreateTime,VwOCUserName.UserName,VwOCUserHeadImages.ImageUrl,r.AssociateItemID FROM RBoardDiscuss_Table r LEFT JOIN [OpenBoardDiscuss] op ON r.OpenBoardDiscussID=op.OpenBoardDiscussID LEFT join dbo.VwOCUserName   ON op.WriterID = dbo.VwOCUserName.UserID  LEFT join dbo.VwOCUserHeadImages  ON dbo.VwOCUserName.UserID = dbo.VwOCUserHeadImages.AssociateItemID AND AssociateItemCode='OCPIIMiddle' WHERE r.AssociateItemDefinitionID=184 AND op.RecoardStatus<>4 AND op.IsWhispered=0 ORDER BY op.OpenBoardDiscussID

WITH RBoardDiscuss_Table(Id,ParentId,FineName)
 AS(
 SELECT Id,ParentId,FineName from dbo.Fine WHERE Id = 1
 UNION ALL
 SELECT f.Id,f.ParentId,f.FineName FROM dbo.Fine AS f
 INNER JOIN RBoardDiscuss_Table B ON f.ParentId = B.Id
  )
  SELECT  * FROM   RBoardDiscuss_Table

SQLserver2008使用表达式递归查询

--由父项递归下级
with cte(id,parentid,text)
as
(--父项
select id,parentid,text from treeview where parentid = 450
union all
--递归结果集中的下级
select t.id,t.parentid,t.text from treeview as t
inner join cte as c on t.parentid = c.id
)
select id,parentid,text from cte

---------------------

--由子级递归父项
with cte(id,parentid,text)
as
(--下级父项
select id,parentid,text from treeview where id = 450
union all
--递归结果集中的父项
select t.id,t.parentid,t.text from treeview as t
inner join cte as c on t.id = c.parentid
)
select id,parentid,text from cte

原文地址:https://www.cnblogs.com/chenjt/p/3003403.html