2016-07-19 3 views
-2

Моя цель состоит в том, чтобы привлечь все элементы из таблицы cat.CAT_RUTAS и я добавляю тип null в список со значением «Enlistar тода лас Rutas», поэтому я хочу, чтобы значение null быть первый вариант результата и сортировка остальных значений по возрастанию.Ошибка сортировки обнуляет первый MSSQL

Я использую MSSQL SERVER, но когда я пытаюсь запустить этот запрос:

select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion ASC NULLS FIRST 

Проблема заключается в том, когда я пытаюсь добавить нулевое значение в верхней части. Получение ошибки:

Неправильный синтаксис около 'NULLS'.

+3

'ORDER BY столбец NULLS FIRST' не действует синтаксис SQL Server – Lamak

+0

Вы просто сортировать по неправильной колонке? В одном из комментариев вы сказали, что хотите сначала «Enlistar todas las rutas». Но вы не сортируете по этой колонке. Попробуйте изменить на «order by CATrut_iIdentificador» –

+0

@SeanLange, он сначала хочет отсортировать все NULL в столбце идентификатора, а затем остальные столбцы по алфавиту. –

ответ

1

Вот еще один вариант, который просто добавляет новый столбец для сортировки.

select CATrut_iIdentificador, CATrut_vDescripcion, 1 as SortOrder 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas', 0 as SortOrder 
order by SortOrder, CATrut_vDescripcion 
+0

Но что, если в столбце 'CATrut_iIdentificador' есть NULL? хмм? ;) –

+0

@TabAlleman - Я не вижу в вопросе, где это обсуждается так или иначе. Вопрос не затрагивает эту возможность как минимум. –

+0

Нет, нет. Просто указывая, что это может быть так. И даже если это так, неясно, какие результаты будут желательны в этом случае. –

5

Заказать первый по CASE выражения, как это:

ORDER BY 
    CASE WHEN CATrut_iIdentificador IS NULL THEN 0 ELSE 1 END, 
    CATrut_vDescripcion ASC 
+0

Все 3 ответа, которые выскочили, верны. На мой взгляд, это один из самых гибких, поскольку он может использоваться для сортировки по любому количеству пользовательских значений/критериев. –

+0

Я не уверен, что OP понимает, что вы последуете за этим с другим типом в 'CATrut_vDescripcion'. Может быть, добавить для ясности? – shawnt00

+0

О, хорошо. :) –

0

Удалить, что не NULLS FIRST нет такого синтаксиса нет. Это должно быть

select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion 
+0

Да, проблема в том, что я хочу «Enlistar todas las rutas» в верхней части списка, и, как вы можете, значение равно null. Я хочу этот результат: –

+0

Enlistar todas las rutas value 1 –

+0

Такая же проблема, как ответ Мурейника. Посмотрите внимательно на исходный запрос. OP хочет отсортировать по NULL в столбце ID, а затем в алфавитном порядке в столбце Описание. Это не все те же столбцы. –

2

MS SQL Server не поддерживает предложение nulls first. Однако, глядя на order by clause documentation, вы увидите, что:

Null values are treated as the lowest possible values.

Так с asc заказа, вы не должны делать ничего, что null s придет первым в любом случае:

select CATrut_iIdentificador, CATrut_vDescripcion 
from cat.CAT_Rutas 
UNION 
SELECT NULL , 'Enlistar todas las rutas' 
order by CATrut_vDescripcion ASC 
+0

За исключением того, что в данных образца столбец Descripcion не тот, который может быть NULL. –

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