【问题标题】:Getting Error while executing执行时出错
【发布时间】:2011-01-04 06:53:35
【问题描述】:

删除硬编码值时出现错误。

我需要编写简单的 select 语句而不是这个 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'

我替换了这个 select 语句,而不是那个 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 转换为 float 时出错。

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

谢谢, 锯齿

【问题讨论】:

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


    【解决方案1】:

    你不能平均 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'
    

    【讨论】:

    • [AVG] 是字段名称而不是聚合的使用,所以我认为“你不能平均 varchars”在这里适用。
    • 感谢您给我答复。但是如果我们输入小数就会出现问题......因为该列中有一个值'NULL'。如果我们输入小数,它不会接受'NULL'......那我现在该怎么办......
    • [AVG] 列只是他们取的一个名字......他们没有在那里聚合任何东西......
    • 你不应该使用'Null',而是使用NULL。
    【解决方案2】:

    我猜s.AVG 是一个浮点数,而q.Source 不是。这将导致 SQL Server 对 JOIN ON s.[AVG] = q.[Source] 进行隐式转换,并且您的值之一不是字符。您应该再看看my answer 或 Martin's你上次遇到这个问题。

    例如

    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 上使用数字类型?

    【讨论】:

    • 您好,感谢您提醒我,但我已经尝试过它在我的情况下不起作用....因为有些值包含“NULL”,有些是 1,2,3,有些是 1.1, 2.33,2.54这样......
    • " 'NULL'" 看起来不对。它应该是“IS NOT NULL”(除非实际值为“null”,这是不好的设计)。
    • @IanC 这是一个糟糕的设计,因此我的解释是“如果您需要删除四个字符值 'NULL”
    • 我知道...我的评论是给 OP 的,而不是你 :-)
    猜你喜欢
    • 2018-05-13
    • 2012-02-25
    • 2018-08-05
    • 2015-01-01
    • 2019-01-23
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多