【发布时间】:2011-03-15 16:12:49
【问题描述】:
我们有一张这样的表(简化版):
项目:
Itemid Itemname Itemfatherid
itemA theitemA null
itemB theitemB null
itemC theitemC itemA
itemD theitemD itemA
itemE theitemE itemC
itemF theitemF itemE
itemG theitemG itemD
我们需要一个给出以下结果/格式的 sql 查询:(更正的版本)
Col1 Col2 Col3 Col4
itemA itemC itemE itemF
itemA itemD itemG NULL
itemB NULL NULL NULL
我们的 ERP 会采用此结果并将其转换为如下所示的树形控件:
-itemA
-itemC
-itemE
itemF
-itemD
itemG
itemB
树的层级不是固定的,所以列数必须是动态的...
CTE 有一些方法,但我们还没有找到解决方案:S
http://www.sqlservercurry.com/2009/06/simple-family-tree-query-using.html
我们还需要知道树的深度(将它传递给 GridControl...),在这个例子中它将是 3(它需要最大的父级别数 --> -itemA -itemC -itemE)
【问题讨论】:
-
动态列需要动态 SQL。在 TSQL 中不是特别简单。你的代码不能以行格式处理它吗?
-
嗯,它是一个 sql 查询,作为 c# 中的字符串,在控件调用中传递,如 Grid.Render("sql");所以一些逻辑可以在 c# 中实现,但我们更喜欢在查询本身中处理它......
标签: sql-server sql-server-2008 formatting tree hierarchy