Порядок по дате показывает сначала нули, а затем самые последние даты
У меня есть хранимая процедура, которая выполняет инструкцию Select. Я хотел бы, чтобы мои результаты были упорядочены по полю даты и отображали все записи с нулевыми датами, а затем самые последние даты.
оператор выглядит так:
SELECT a,b,c,[Submission Date]
FROM someView
ORDER BY [Submission Date] ASC
теперь это будет отображать все записи с нулевыми датами представления сначала, но когда я доберусь до строк, которые имеют значения даты в них, они не являются самыми последними датами в представлении.
если я заменю ASC на DESC, то я получите даты в том порядке, который я хочу, но нулевые значения находятся в нижней части моего результирующего набора.
есть ли способ структурировать мой запрос так, чтобы я мог отображать нулевые значения вверху, а затем, когда есть значения даты, упорядочить их по убыванию от самых последних до самых старых?
7 ответов:
@Крис, У тебя почти получается.
ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, [Submission Date] DESC
[Edit: #Eppz попросил меня настроить код выше, как показано на данный момент]
Я лично предпочитаю это намного лучше, чем создание "магических чисел". Магические числа почти всегда являются проблемой, ожидающей своего часа.
вы можете сделать что-то вроде этого положить нуль в нижней части:
ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC
стандартный SQL (ISO / IEC 9075-2: 2003 или более поздняя версия-2008) предусматривает:
ORDER BY SomeColumn NULLS FIRST
большинство СУБД на самом деле еще не поддерживают это, AFAIK.
попробовать
SELECT a,b,c,[Submission Date] FROM someView ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC
попробуй такое
выберите a,b, c, [дата отправки] ОТ someView ПО ЗАКАЗУ isnull ([дата представления], cast ('1770/01/01' as datetime)) ASC
Я знаю, что это старый, но когда я нашел его, я заметил принятое решение,https://stackoverflow.com/a/821856/7177892, можно упростить, сделав результат оператора CASE либо сегодня (GETDATE ()), либо фактической датой.
Оригинал:
ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, [Submission Date] DESC
упрощенный:
ORDER BY (CASE WHEN [Submission Date] IS NULL THEN GETDATE() ELSE [Submission Date] END) DESC