SQL SELECT Упорядочение столбцов с нулевыми значениями - PullRequest
8 голосов
/ 31 марта 2011

Мой вопрос похож на этот: Как отобразить порядок таблиц по коду (например, 01, 02 ... затем нулевые столбцы)? , но для SQL Server.

Короче говоря, у меня есть оператор SELECT, который возвращает следующее:

ColumnA ColumnB
X       NULL
Y       1
Z       2

.. где упорядочение выполняется ColumnB.

Как мы можем принудительно задать тип столбцов (columnB = NULL)?то есть ожидаемый результат:

ColumnA ColumnB
Y       1
Z       2
X       NULL

Спасибо сообществу SOF.

Ответы [ 3 ]

23 голосов
/ 31 марта 2011

... или во избежание столкновения значений ...

SELECT 
   ColumnA, 
   ColumnB
FROM YourTable
ORDER BY 
   CASE WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
   ColumnB
2 голосов
/ 31 марта 2011

Вы также можете использовать isnull:

select * from thetable order by isnull(columnb, 99999)

isnull заменит значение null значением, которое вы ему предоставите, поэтому в этом случае, если столбец имеет значение null, он заменит его на 99999. Вы можетеустановите значение в какое-то большое число, чтобы оно было в нижней части заказа.

0 голосов
/ 25 апреля 2014

в надежде помочь кому-то, Я просто хотел добавить, что у меня была похожая проблема, с использованием row_number и разбиения по - когда это ноль, положить его в конце рода вещи и я использовал скрипт ниже (частичный вид):

   ,T.MONTHS_TO_AUTOGROWTH
   ,the_closest_event=ROW_NUMBER() OVER (PARTITION BY SERVERID, DRIVE ORDER BY 
                                      CASE WHEN MONTHS_TO_AUTOGROWTH > 0 THEN MONTHS_TO_AUTOGROWTH ELSE 9999 
                                      END ) 

результат упорядочен MONTHS_TO_AUTOGROWTH, но ноль идет последним

...