Как сортировать записи в SQL, как в родительском дочернем порядке

У меня есть таблица со столбцами "ItemId" и "ParentItemId". Я хочу, чтобы результаты были отсортированы в порядке родитель-потомок. при этом есть и другие столбцы, по которым необходимо сортировать данные. Я хочу, чтобы данные были отсортированы на основе "itemType".

Например.

 AutoId | itemId | parentItemId | itemType
   1        1       0               3
   2        2       null            4
   3        3       0               6
   4        4       null            5
   5        5        1              9
   6        6        2              9
   7        7        3              9
   8        8        4              9
   9        9        0              2
   10       10       0              1

Теперь я хочу, чтобы результаты отображались, как в приведенном ниже формате.

 AutoId | itemId | parentItemId | itemType
   10       10        0              1
   9        9         0              2
   1        1         0              3
   5        5         1              9
   2        2        null            4
   6        6         2              9
   4        4        null            5
   8        8         4              9
   3        3         0              6 
   7        7         3              9

Есть ли способ сортировать записи таким образом?

Любая помощь будет оценена по достоинству. Спасибо.


person KloppForKop    schedule 03.05.2018    source источник


Ответы (3)


Ты можешь сделать это:

select *
from table1
order by coalesce(parentitemid,itemid), itemid

Пример: http://sqlfiddle.com/#!9/32e58e/2

person Turophile    schedule 03.05.2018
comment
Это предполагает, что родительский itemid всегда будет меньше, чем дочерний itemid, но здесь это кажется разумным предположением. - person Tim Biegeleisen; 03.05.2018

Для MySql используйте ifnull для поля parentItemId.

select *
from table
order by IFNULL(parentItemId, itemId), itemId

для оракула

select *
from table
order by NVL(parentItemId, itemId), itemId
person hkutluay    schedule 03.05.2018

Взято из ответа @hkutluay для SQL Server:

select * from table1 order by ISNULL(parentItemID, ItemID), ItemID

person Jitendra Gupta    schedule 03.05.2018