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