我在发现硬编码值时遇到错误。
而不是这个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
答案 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 answer或
Martin'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上使用数字类型开始?