一尘不染

我该如何由父母然后由孩子订购?

sql

我试图以这样一种方式编写SQL Server
2008查询,以便可以根据需要循环遍历输出和输出标头。我已经多次以错误的方式完成了这些工作,并让ColdFusion在页面中进行了艰苦的工作,但是需要在SQL
Server中完成。

FeatureID ParentID Feature
--------------------------
1         0        Apple      
2         0        Boy 
3         2        Charles
4         1        Daddy
5         2        Envelope
6         1        Frankfurter

我希望查询结果集如下所示:

FeatureID ParentID Feature
--------------------------
1         0        Apple      
4         1        Daddy
6         1        Frankfurter
2         0        Boy 
3         2        Charles
5         2        Envelope

如果ParentID为0,则表示它是主要类别。如果ParentID大于0,则表示它是次要类别,是父级的子级。

因此,父母需要订购A-Z,而孩子则需要订购AZ。

您能帮我正确订购吗?

SELECT FeatureID, ParentID, Feature
FROM Features
ORDER BY

阅读 112

收藏
2021-03-10

共1个答案

一尘不染

根据您的评论,如果您知道只有两个级别,那么有一个简单的解决方案:

select  *
from    @Features feat
order by
        case 
        when ParentID = 0 
        then Feature 
        else    (
                select  Feature 
                from    @Features parent 
                where   parent.FeatureID = feat.ParentID
                ) 
        end
,       case when ParentID = 0 then 1 end desc
,       Feature
  1. 按根元素的名称排序:对于根,这是“功能”列。对于孩子,请使用子查询查找根的名称。
  2. 在根上排序根
  3. 按名称对孩子进行排序

SE Data的示例。

2021-03-10