2011-12-27 1 views
1

В моем запросе при вычислении среднего значения я сталкиваюсь с делением на нулевую ошибку. Я пытаюсь разрешить это, используя Nullif, но я не думаю, что мой синтаксис верен, так как Coldfusion выдает ошибку с указанием неправильного синтаксиса рядом с ')'.NullIf() для предотвращения деления на нуль

Мой запрос:

<cfquery name="getValueAdd" datasource="#myDSN#"> 
    select d.partnum, sum(docunitprice * orderqty) as total_sales, 
    sum((c.avglaborcost + c.avgburdencost + c.avgmaterialcost + c.avgsubcontcost + c.avgmtlburcost)*d.orderqty) as total_cost, 
    sum((docunitprice * orderqty)-((c.avglaborcost + c.avgburdencost + c.avgmaterialcost + c.avgsubcontcost + c.avgmtlburcost)*d.orderqty)) as Value_add, 
    avg (isNull(
((((docunitprice * orderqty)-((c.avglaborcost + c.avgburdencost + c.avgmaterialcost + c.avgsubcontcost + c.avgmtlburcost)*d.orderqty))/ (nullIf(docunitprice * orderqty), 0),0) 
))) as PercValueAdd 
    from orderhed h with(nolock), orderdtl d with(nolock), partcost c with(nolock) 
    where h.company = 'PC68300' 
    and d.company = h.company 
    and c.company = h.company 
    and d.ordernum = h.ordernum 
    and c.partnum = d.partnum 
    and hdcasenum = <cfqueryparam cfsqltype="cf_sql_integer" value="#rc.hdcasenum#" /> 
    group by d.partnum 
</cfquery> 

Может кто-нибудь разъяснить синтаксис для меня, пожалуйста?

ответ

3

NullIf() принимает два параметра. Вы искали документацию NullIf()?

NULLIF возвращает первое выражение, если два выражения не равны . Если выражения равны, NULLIF возвращает нулевое значение типа первого выражения.

Вот пример: http://www.bennadel.com/blog/984-Using-NULLIF-To-Prevent-Divide-By-Zero-Errors-In-SQL.htm

+0

+1 Они нуждаются в 'NULLIF (expression_that_might_be_zero, 0)', так что нули преобразуются в 'NULL' и это не приводит к ошибке. –

+0

Я считаю, что у меня это здесь: (nullIf (docunitprice * orderqty), 0). Это неправильно? – aparker81

+0

@ aparker81, у вас есть только этот синтаксис в одном из ваших утверждений 'nullif', а не в обоих. – Ben

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

  • Нет связанных вопросов^_^