2017-02-17 128 views
1
SELECT a.[Emp_No], 
     a.[Emp_Name], 
     a.[Band], 
     b.[Max_Exp] AS Max_Yrs_Experience, 
     CASE WHEN a.Performance_Score = 0 AND (a.Status_Active > 0 OR a.Status_New > 0) 
      THEN CONVERT(varchar, 0) 
      WHEN a.Performance_Score > 0 
      THEN [Performance_Score] 
      ELSE 'No History Data Found' 
     END AS Performance_Score 
INTO #EXPER 
FROM #PERFORMANCE a, #agg_exp b 
WHERE a.[Emp_No] = b.[Emp_No] 
ORDER BY Performance_Score DESC 

Error converting varchar to float.甚至将其转换后为varchar它给错误:错误转换数据类型为varchar浮动,

我不知道为什么我收到这个错误。

+0

您使用的是SQL Server吗? –

+0

是的,我使用SQL Server –

回答

1

您遇到的困难是由于SQL Server要求在CASE表达式中生成的所有可能值具有相同的类型。由于您的ELSE使用的文本不能转换为任何数字类型,唯一的选择是将数字转换为文本。

CASE WHEN a.Performance_Score = 0 AND (a.Status_Active > 0 OR a.Status_New > 0) 
    THEN CONVERT (VARCHAR(10), 0)      -- zero as text 
    WHEN a.Performance_Score > 0 
    THEN CONVERT (VARCHAR(10), [Performance_Score]) -- performance score as text 
    ELSE 'No History Data Found'      -- this is already text 
END AS Performance_Score 

该错误消息去,我在这里假设[Performance Score]是float列。如果是其他类型,则必须适当修改呼叫CONVERT()

+0

[性能分数]是一个int的列 –

+0

喜添, 我想表现的分数,因为只有一个int,即 第一种情况下应该给“新国家” fullfilling条件 第二应情况后只给出Performance_Score(这是一个数值) 否则它会给'没有找到历史数据' 请帮忙 –

+0

@SandhyaNegi您不能将文本和纯数字混合为同一个“CASE”表达式的输出。我试图做的一点是你可以显示数字,但你需要先将它们转换为文本。 –

相关问题