我如何按家长顺序下单,然后按孩子顺序下单



我正试图以这样一种方式编写我的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顺序排列,孩子需要按A-Z顺序排列。

你能帮我正确订购这个吗?

SELECT FeatureID, ParentID, Feature
FROM Features
ORDER BY

从你的评论,如果你知道只有两个级别,有一个简单的解决方案:

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. 按根元素的名称排序:对于根元素,这是Feature列。对于子目录,使用子查询查找根目录的名称。
  2. 将根排序到最上面
  3. 按名称对子节点进行排序

对于mysql,您可以尝试:(与条件您的孩子的ParentID是您的ParentID的FeatureID)

SELECT FeatureID, ParentID, Feature
FROM Features
ORDER BY case when ParentID=0 then FeatureID else ParentID end * 1000 + FeatureID ASC

相关内容

最新更新