NullIf () для предотвращения деления на ноль - PullRequest
1 голос
/ 28 декабря 2011

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

Мой запрос:

<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>

Кто-нибудь может уточнить синтаксис для меня, пожалуйста?

1 Ответ

3 голосов
/ 28 декабря 2011

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

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

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

...