执行时出错

时间:2011-01-03 17:22:20

标签: sql sql-server tsql sql-server-2008

我在发现硬编码值时遇到错误。

而不是这个case语句我需要编写简单的select语句...使用临时表...

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]

所以我用temp table .....写了一段代码。

SELECT [Source], [Score] 

INTO #Temp_Table

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

WHERE [data_Source] = 'USA'

而不是那个case语句我替换了这个select语句....

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]

但是我在执行时遇到错误......错误是

  

Msg 8114,Level 16,State 5,Line 1       将数据类型varchar转换为float时出错。

而不是q.[score] as Q附近的那个地方我可以写什么......以及如何编写语法......

谢谢, Sahsra

2 个答案:

答案 0 :(得分:2)

你无法对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'

答案 1 :(得分:0)

我猜测s.AVG是浮点数而q.Source不是浮点数。这将导致SQL Server对JOIN ON s.[AVG] = q.[Source]进行隐式转换,并且您的某个值不是字符。您应该再看一下my answerMartin's上次遇到此问题时。{/ p>

e.g。

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

UPDATE 如果您需要删除四个字符值'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上使用数字类型开始?