2016-10-04 1 views
-2

У меня есть таблица размером до 50 строк ... как показано ниже.Как упорядочить строки Sql в определенном формате

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
5 tetss 1  1 
6 uni 3  0 

, но я хочу быть отсортирован

Как

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
5 tetss 1  1 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
6 uni 3  0 

Если есть какие-либо запрос, пожалуйста, дайте мне знать .. спасибо заранее.

Я с помощью SQL Server 2014

+7

Какова логика для требуемого порядка? –

+0

да заказать по меню по возрастанию. –

+3

На каком языке 't' предшествует 'c'? – Strawberry

ответ

0

Я думаю, что запрос ниже производит требуемую мощность:

SELECT t1.ID, t1.menu, t1.dispOdr, t1.ParntID 
FROM mytable AS t1 
LEFT JOIN mytable AS t2 ON t1.ParntID = t2.ID 
ORDER BY CASE 
      WHEN t1.ParntID = 0 THEN t1.dispOdr 
      ELSE t2.dispOdr 
     END, 
     CASE 
      WHEN t1.ParntID = 0 THEN 1 
      ELSE 2 
     END, 
     t1.dispOdr 

Первые CASE экспрессии группы записей в соответствии с dispOdr их родителей. Второй CASE помещает родительский элемент в верхней части своей подгруппы. Наконец, последнее выражение, используемое в предложении ORDER BY, упорядочивает все дочерние записи внутри подгруппы.

Примечание: Вышеуказанный запрос работает с одним уровнем вложенности.

+0

Спасибо, что он работает отлично .... :) –

1

Я думаю, что вам нужен ваш текущий и желаемый выходные данные. Вы говорите, что хотите, чтобы столбец меню отсортировался, но кажется, что он уже есть.

Так предполагается, что вы на самом деле, начиная со второй таблицы, можно отсортировать столбец меню просто с помощью ORDER BY:

SELECT * 
FROM mytable 
ORDER BY menu ASC 

 Смежные вопросы

  • Нет связанных вопросов^_^