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