更新: 我有一个简单的一级父子关系表,其中包含以下列:
ID_Asset| Parent_ID_Asset | ProductTitle
我需要按“父级”分组的输出,然后是“子级”,还要按“父级和子级名称”排序。我在小提琴中的尝试。
有关详情,请参见此处:https://rextester.com/PPCHG20007
所需订单:
9 8 NULL ADONIS Server
7 16 8 ADONIS Designer
8 20 8 ADONIS Portal Module “Control & Release” Package XS
首先是父母,而不是孩子,而ProductTitle按字母顺序排列。
感谢所有提示。
答案 0 :(得分:0)
我将改为条件排序:
select t.*
from table t
order by (case when parent_id is null then id else parent_id end), ProductTitle;
我假设您需要根据父子关系对数据进行排序。
答案 1 :(得分:0)
据我了解,您需要对根产品的名称进行排序,并在它们之间显示按名称排序的子产品,并在其之间显示其子产品等。 / p>
我猜您正在使用递归CTE。您可以定义一个“层次结构排序”帮助程序,该帮助程序是当前级别中的填充数字,对于每个深层次,请在当前级别中添加一个带有填充数字的后缀,等等。
类似的东西:
isActionAvailable()
答案 2 :(得分:0)
我认为这是您要寻找的订单。这会将每一行连接到其父行(如果存在)。然后,如果有TP(父)记录,则该记录就是父标题,ID等,否则当前记录必须是父记录。为了清楚起见,我在查询结果中显示了父名称。然后按
排序代码为
Select T.*,
isnull(TP.ProductTitle, T.ProductTitle) as ParentName -- This is the parent name, shown for reference
from test T
left outer join Test TP on TP.ID_Asset = T.Parent_ID_Asset --This is the parent record, if it exists
ORDER BY isnull(TP.ProductTitle, T.ProductTitle), --ParentName sort
isnull(TP.ID_Asset, T.ID_Asset), --if two parents have the same title, this makes sure they group with their correct children
Case when T.Parent_ID_Asset is null then 0 else 1 end, --this makes sure the parent comes before the child
T.ProductTitle --Child Sort