2015-04-28 4 views
1

У меня есть следующая таблицанужен запрос SQL для этого случая

OrderNO | ParentNO 
1   |  null 
2   |  null 
1   |  3 
2   |  3 
3   |  null 

Мне нужен SQL запрос, который будет извлекать вышеуказанные данные таблицы в следующем порядке

OrderNO | ParentNO 
    1   |  null 
    2   |  null 
    3   |  null 
    1   |  3 
    2   |  3 

Логика этой точки зрения это первое предпочтение относится к ордеру no с нулевым значением, если в родительском нет никакого ордера no, то он должен отображаться рядом с соответствующим порядком no.In приведенный выше пример - orderno1 с нулевым значением входит в первую строку, тогда, поскольку orderno1 недоступен в parentno, то следующий orderno2 с null parentno отображается sin ce orderno2 недоступен в parentno, затем следующий orderno3 с нулевым родительским отображением, тогда как orderno3 доступен в parentno, соответствующие строки отображаются ниже 3.1 (1 | 3), затем 3,2 (2 | 3)

ответ

1

Вы можете использовать NULLS FIRST ниже

select OdrerNO, ParentNO 
from tab 
order by ParentNO NULLS FIRST, OdrerNO ASC 
1

Попробуйте этот запрос:

SELECT OrderNo, ParentNo FROM 
table 
ORDER BY ParentNo ASC NULLS FIRST, OrderNo ASC 

Вы должны указать NULLS FIRST на THD ParentNo колонку, потому что по умолчанию NULL значения идут в порядке возрастания.

0

Try:

Select * FROM TABLE 
ORDER BY ParentNo, OrderNo 

Nulls должен прийти первым, если я правильно помню. Поэтому, заказывая его родителемNo, сначала выдаст Nulls, а затем закажу orderNo. Поэтому даст желаемый эффект.

+0

Это не даст желаемого эффекта, так как значения 'NULL' приходят _last_ в восходящем порядке, что соответствует вашему запросу (' ASC' является порядком по умолчанию в Oracle). –

+0

А не видел тег oracle. Прекрасно работает на сервере MS SQL – Sam