Как я могу заказать родителем, потом потом ребенком?

Я пытаюсь написать свой запрос 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

Ответ 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. Сортировать по имени корневого элемента: для корня это столбец Feature. Для детей ищите корневое имя с помощью подзапроса.
  2. Сортировать корень сверху
  3. Сортировать детей по имени

Пример на данных SE.

Ответ 2

для mysql, вы можете попробовать: (при условии, что ваш дочерний ParentID является вашим идентификатором ParentID)

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