порядок sql по нескольким столбцам с нулевыми значениями

#sql #sql-order-by

#sql #sql-order-by

Вопрос:

У меня есть набор результатов, который выглядит следующим образом в таблице var (извините за плохое форматирование):

 RootID | RootName | ChildId | ChildName

1      |  Bob     |  null   |   null   

1      |  null    |    4    |   Tim

1      |  null    |    6    |   Cindy

2      |  Alice   |  null   |   null

2      |  null    |  7      |   Joe 

2      |  null    |    9    |   Jack

3      |  Frank   |  null   |   null 

3      |  null    |   17    |   ken
  

Что я хотел бы сделать, так это упорядочить их по корневому имени ASC, а затем по дочернему имени ASC, чтобы получить их в алфавитном порядке. Есть предложения? Заранее спасибо

Комментарии:

1. Не уверен, что я понимаю вопрос. Вы пытаетесь сделать что-то большее, чем то, что ORDER BY RootName, ChildName дало бы вам?

2. С какой проблемой вы столкнулись? Вы хотите, чтобы нули отображались в определенном порядке?

3. если я использую порядок по корневому имени, имени дочернего элемента, я в конечном итоге теряю родительскую дочернюю структуру. все корневые имена сгруппированы, и все дочерние имена сгруппированы. Я хотел бы сначала упорядочить столбец rootname в алфавитном порядке, сохранив все строки с одним и тем же корневым идентификатором вместе, затем упорядочить дочернее имя в алфавитном порядке, сохранив корневой идентификатор вместе. или, по крайней мере, отсортируйте корневое имя по порядку альфа

4. Я думаю, что это скорее проблема выбора / объединения, чем упорядочения. Почему у этих строк есть идентификатор root, но нет имени root?

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

Ответ №1:

Если это работает для вашего приложения, я бы переписал запрос, чтобы избавиться от nulls. Я не могу не думать, что

 RootID | RootName | ChildId | ChildName  
1      |  Bob     |    4    |   Tim  
1      |  Bob     |    6    |   Cindy  
2      |  Alice   |  null   |   Joe   
2      |  Alice   |    4    |   Jack  
3      |  Frank   |    7    |   ken
  

С этим было бы проще работать. (Ну, это NULL для Alice / Joe — это опечатка, верно?)

Ответ №2:

Эмм… Как насчет этого?

 select * from yourtable order by RootName ASC, ChildName ASC
  

Вы можете использовать NULLS LAST и NULLS FIRST (по крайней мере, в Oracle) для управления тем, куда должны быть помещены нули при сортировке.

Комментарии:

1. В большинстве продуктов других поставщиков также есть «разновидности» NULLS LAST и NULLS FIRST.

2. Я так и думал, вот почему я упомянул об этом.

Ответ №3:

 select rec_id,gr_id from jegad order by 1 desc

select isnull(rec_id,'-'),isnull(gr_id,'-') from jegad order by 1 desc
  

ПОРЯДОК По РЕГИСТРУ, КОГДА Col равен NULL, Тогда 1 Еще 0 заканчивается, Col