我试图以这样一种方式编写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



按根元素的名称排序:对于根,这是“功能”列。对于孩子,请使用子查询查找根的名称。
在根上排序根
按名称对孩子进行排序


Example at SE Data.

关于sql - 我该如何由 parent 然后由 child 订购?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28552958/

10-11 19:59