Ошибка преобразования типа данных varchar в float при использовании функций ISNULL и NULLIF в SQL Server 2012

Когда я использую следующий код SQL, я получаю эту ошибку:

Ошибка преобразования типа данных varchar в float

Мой код:

select 
    [DEVELOPIN], 
    avg([DEVELOPINGCOST]) as [AVG DEVELOPINGCOST],
    avg([SOFTWARECOST]) as [ AVG SOFTWARECOST],
    ISNULL(AVG([DEVELOPINGCOST] / NULLIF([SOLDCOPIES], 0)), 'No Sale') as [AVG PER Sale] 
from
    [dbo].[SOFTWARE] 
group by 
    [DEVELOPIN]

Ошибка была изолирована от этого выражения:

ISNULL(AVG([DEVELOPINGCOST] / NULLIF([SOLDCOPIES], 0)), 'No Sale') as [AVG PER Sale]

person Noman Khan    schedule 28.03.2017    source источник
comment
1. Выполните некоторые базовые действия по устранению неполадок, выбирая только одно поле за раз и изолируя поле, вызывающее проблему. 2. Какие типы данных полей вызывают вашу проблему?   -  person Nick.McDermaid    schedule 28.03.2017
comment
ISNULL(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)),'No Sale') as [AVG PER Sale]   -  person Noman Khan    schedule 28.03.2017
comment
Я отредактирую ваш вопрос. После того, как я отредактирую ваш вопрос, отредактируйте его и добавьте типы данных этих полей.   -  person Nick.McDermaid    schedule 28.03.2017
comment
следующий код работает нормально: выберите [DEVELOPIN],avg([DEVELOPINGCOST])as [AVG DEVELOPINGCOST],avg([SOFTWARECOST]) as [AVG SOFTWARECOST], ISNULL(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0 )),'0') как [СРЕДНЯЯ ПРОДАЖА] от [dbo].[ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ] ГРУППА ОТ [РАЗРАБОТЧИКА]   -  person Noman Khan    schedule 28.03.2017


Ответы (1)


Моя ошибка заключается в том, что результатом вашего первого выражения в функции ISNULL является число с плавающей запятой, и вы присваиваете значение типа varchar, т.е. «Нет продажи», когда exp оценивается как null. Также убедитесь, что тип данных обоих выражений функции nullif соответствует Попробуйте преобразовать ваше выражение в варчар

select [DEVELOPIN]
      ,avg([DEVELOPINGCOST])as [AVG DEVELOPINGCOST]
      ,avg([SOFTWARECOST]) as [ AVG SOFTWARECOST]
      ,  ISNULL(CAST(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)) as varchar),'No Sale') 
 from[dbo].[SOFTWARE] GROUP BY [DEVELOPIN]
person Rupesh Pandey    schedule 28.03.2017
comment
convert(varchar(20),ISNULL(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)),'NO Sale')) as [AVG PER Sale]------------ все еще с той же ошибкой - person Noman Khan; 28.03.2017
comment
это должно быть похоже на ISNULL(CAST(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)) as varchar),'No Sale') Попробуйте выполнить запрос в ответ - person Rupesh Pandey; 28.03.2017