Как присвоить значение по умолчанию дате в агрегатной функции?

#sql #sql-server-2005

#sql #sql-server-2005

Вопрос:

 select isnull(min(date_tested),'01-01-2010') from test_date where date_tested>=@startdate and enddate<=@enddate 
  

Иногда я получаю этот вывод-

 datetested
__________
  

Я хочу —

 datetested
01-01-2010
  

Итак, это не работает … я имею в виду, что в случаях, когда даты там нет, она возвращает пустое значение .. я хочу возвращать значение по умолчанию в любое время, когда оно возвращается, я думаю blank….as Я предполагаю, что date_tested не равно null, иначе ему было бы присвоено значение asigned .. как я могу присвоить ему значение по умолчанию в случаях, когда оно равно null ?

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

1. что именно не работает?, это функция?, что вы имеете в виду, указав для нее значение по умолчанию?

2. обновленный мой вопрос, надеюсь, имеет немного больше смысла.

3. @Неправильное название: пожалуйста, опубликуйте образец ваших данных и желаемый набор записей.

4. если date_tested не равно нулю, и оно возвращает пустое значение, то я предполагаю, что это столбец типа данных CHAR. Это правильно?. Вы хотите, чтобы значение по умолчанию присваивалось таблице или результату вашего запроса?

5. Я хочу, чтобы запросу было присвоено значение по умолчанию … я добавил пример ввода-вывода

Ответ №1:

Попробуйте это вместо:

выберите min(isnull(date_tested,’01-01-2010′)) из группы test_date по date_tested

Использование статусов isnull и case внутри агрегатов может дать вам много возможностей

Ответ №2:

Попробуйте это

 select coalesce(date_tested,'01-01-2010') from test_date group by date_tested
  

Ответ №3:

Почему вы группируете по столбцу, который используется в агрегатной функции? Если есть X значений, удовлетворяющих условию в WHERE , вы получите X строк. Но если это действительно то, что вы хотите, вы можете использовать

 SELECT 
ISNULL((SELECT MIN(date_tested) 
FROM test_date 
WHERE date_tested>=@startdate and enddate<=@enddate  
group by date_tested),'01-01-2010') as [datetested];
  

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

1. Сообщение 512, уровень 16, состояние 1, подзапрос строки 1 вернул более 1 значения. Это недопустимо, когда следует подзапрос =, !=, <, <= , >, >= или когда подзапрос используется как выражение.

2. Конечно, потому что группировка по одному и тому же столбцу приводит к возврату того же набора записей, что и без aggregate и group by.

Ответ №4:

Ну, я не понимаю, хотите ли вы MIN date_tested или вы хотите все возможные значения date_tested , потому что вы используете MIN для date_tested и группируете ПО date_tested . Если вам нужно МИНИМАЛЬНОЕ значение, вы можете сделать следующее:

 SELECT MIN(ISNULL(date_tested,'01-01-2010'))
FROM test_date
WHERE date_tested>=@startdate and enddate<=@enddate 
  

с этим нужно быть осторожным, потому что вы присваиваете значение date_tested, если оно было нулевым. Если вы хотите, чтобы все возможные значения для date_tested были проверены, то вы можете сделать это:

 SELECT ISNULL(date_tested,'01-01-2010')
FROM test_date
WHERE date_tested>=@startdate and enddate<=@enddate 
GROUP BY ISNULL(date_tested,'01-01-2010')
  

Ответ №5:

Попробуйте использовать ваш параметр start date по умолчанию, подобный этому…

 select isnull(min(date_tested),@startdate)
from test_date 
where date_tested>=@startdate 
and enddate<=@enddate