3 回答
TA贡献1765条经验 获得超5个赞
尝试这个:
;WITH items AS (
SELECT EstimateItemID, ItemType
, 0 AS Level
, CAST(EstimateItemID AS VARCHAR(255)) AS Path
FROM EstimateItem
WHERE ParentEstimateItemID IS NULL AND EstimateID = @EstimateID
UNION ALL
SELECT i.EstimateItemID, i.ItemType
, Level + 1
, CAST(Path + '.' + CAST(i.EstimateItemID AS VARCHAR(255)) AS VARCHAR(255))
FROM EstimateItem i
INNER JOIN items itms ON itms.EstimateItemID = i.ParentEstimateItemID
)
SELECT * FROM items ORDER BY Path
带Path-行由父节点排序
如果要按ItemType每个级别对子节点进行排序,则可以使用Leveland SUBSTRINGof Pathcolumn ....
这里是SQLFiddle与数据样本
TA贡献1887条经验 获得超5个赞
我相信您需要在CTE的结果中添加以下内容...
BranchID =唯一标识分支的某种标识符。原谅我没有具体说明,但我不确定是什么确定了您需要的分支。您的示例显示了一个二叉树,其中所有分支都流回到根。
ItemTypeID,其中(例如)0 =产品和1 =服务。
父母=标识父母。
如果输出中存在这些内容,我认为您应该能够将查询的输出用作另一个CTE或查询中的FROM子句。按BranchID,ItemTypeID,Parent排序。
- 3 回答
- 0 关注
- 600 浏览
添加回答
举报