2015-04-21 3 views
0

У меня есть следующий sql-запрос, который работает. Однако мне нужна помощь с полями, которые имеют расчет/10000. Иногда в поле не будет данных, поэтому мой запрос ниже возвращает 0. Как проверить данные> 0 перед выполнением вычисления/10000?Заявление sql с if внутри?

SELECT 
timesheet.customerID, 
customer.customer, 
timesheet.projectID, 
project.project_title, 
timesheet.chargeID, 
charge.charge_description, 
timesheet.notes, 
timesheet.mon/10000, 
timesheet.tues/10000, 
timesheet.wed/10000, 
timesheet.thurs/10000, 
timesheet.fri/10000, 
timesheet.sat/10000, 
timesheet.sun/10000, 
timesheet.lineID 

FROM 
timesheet_line timesheet 
LEFT JOIN customer ON timesheet.customerID = customer.customerID 
LEFT JOIN project ON timesheet.projectID = project.projectID 
LEFT JOIN charge_rate charge ON timesheet.chargeID = charge.chargeID 

WHERE 
timesheet.timesheetID = '" & tTimesheetID & "' --VBA variable added here 

ORDER BY 
timesheet.lineID 

ответ

1

Вы можете сделать это, как это (например, колонка)

CASE timesheet.wed > 0 THEN timesheet.wed/10000 ELSE null END as wed, 

если значение может быть пустым, то вы должны сделать это:

CASE COALESCE(timesheet.wed,0) > 0 THEN timesheet.wed/10000 ELSE null END as wed, 
1

У вас есть несколько вариантов:

  • COALESCE функция идеально подходит, когда вы хотите перевести возможно NULL значения к чему-то еще:

    COALESCE(NullableColumn/10000, DefaultValueIfNull) 
    -- btw., NULL divided by 10,000 should yield NULL, not 0. 
    
  • Некоторые диалекты SQL (например, как SQL-сервер T-SQL) имеют очень похожую функцию, называемую ISNULL.

  • CASE ближе к if:

    CASE WHEN NullableColumn IS NOT NULL THEN NullableColumn/1000 ELSE DefaultValue END 
    
Смежные вопросы