Ошибка при выполнении - PullRequest
       10

Ошибка при выполнении

0 голосов
/ 03 января 2011

Я получаю сообщение об ошибке при удалении жестко закодированных значений.

Вместо этого оператора case мне нужно написать простой оператор выбора ... с использованием временных таблиц ...

select case [BVG]
   when 1 then 1
   when 2 then 2
   when 3 then 3
end as Q0,

SELECT  CASE [AVG]
   when 1 then 1
   when 1.33 then 2
   when 1.5  then 2
   when 1.67 then 3
   when 2 then 3
   when 2.33 then 4
End as Q

FROM [MS].[BE].[Survey]

Итак, я написал код, используя временную таблицу .....

SELECT [Source], [Score] 

INTO #Temp_Table

FROM [MS].[dbo].[S_Survey]

WHERE [data_Source] = 'USA'

Вместо этого оператора case я заменяю этот оператор выбора ....

SELECT  q.[Score] as Q --- Getting error in this place.Data Type is varchar (100).

FROM [MS].[BE].[Survey] s

LEFT OUTER JOIN #Temp_Table q on

s.[AVG] = q.[Source]

Но яя получаю сообщение об ошибке при выполнении .... И ошибка

Сообщение 8114, уровень 16, состояние 5, строка 1 Ошибка преобразования типа данных varchar в число с плавающей точкой.

Вместо того места около q.[score] as Q что я могу написать .... и как я могу написать синтаксис ...

Спасибо, Сахсра

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Вы не можете усреднить varchars.

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

SELECT [Source] , cast( [Score] as decimal (10,2) )--or whatever you need it to be

INTO #Temp_Table

FROM [MS].[dbo].[S_Survey]

WHERE [data_Source] = 'USA'
0 голосов
/ 03 января 2011

Я предполагаю, что s.AVG - это число с плавающей запятой, а q.Source - нет. Это заставит SQL Server выполнить неявное преобразование в JOIN ON s.[AVG] = q.[Source], и одно из ваших значений не является символом. Вы должны еще раз взглянуть на мой ответ или Мартина в последний раз, когда у вас была эта проблема.

1010 *, например *

SELECT  q.[Score] 
FROM [MS].[BE].[Survey] s
WHERE like Score '%[^0-9.]%'

ОБНОВЛЕНИЕ Если вам нужно удалить четырехзначное значение 'NULL', вы, вероятно, можете сделать следующее (еще не проверял)

SELECT  q.[Score] as Q --- Getting error in this place.Data Type is varchar (100).

FROM [MS].[BE].[Survey] s

LEFT OUTER JOIN #Temp_Table q on

s.[AVG] = q.[Source]
and q.[Source] <> 'NULL'

Или вы не могли бы вставить их в таблицу #Temp_Table для начала.

Или вы можете удалить эти значения, прежде чем пытаться присоединиться.

Конечно, это заставляет меня задуматься, почему вы не используете числовой тип для #temp_table для начала?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...