2016-09-21 46 views
0

我有一个简单的CASE语句,其中在我希望显示为' - '的ELSE块数字列中。 但它给我一个错误如何在CASE语句中将数字显示字符串替换为' - '

Arithmetic overflow error converting varchar to data type numeric. 

我会怎么做呢? 我希望它是这样的: enter image description here

SELECT 
      CASE WHEN ChargeName = 'Premium' THEN CompanyCommissionPercentage ELSE '-' END AS CompanyCommissionPercentage 
      ,CASE WHEN ChargeName = 'Premium' THEN RemitterCommissionPercentage ELSE '-' END AS RemitterCommissionPercentage 
      ,CASE WHEN ChargeName = 'Premium' THEN RemitterCommission ELSE '-'END AS RemitterCommission 
      ,CASE WHEN ChargeName = 'Premium' THEN GrossCommission ELSE '-'END AS GrossCommission 
FROM @tmpAccountsPayable 

回答

2
`SELECT 
      CASE WHEN ChargeName = 'Premium' THEN CAST(CompanyCommissionPercentage as varchar(10)) ELSE CAST('-' as varchar(10)) END AS CompanyCommissionPercentage 

FROM @tmpAccountsPayable` 
+0

是的。一个结果集只能有一个列的数据类型。由于遇到的第一个值是数字,所以该列设置为数字。系统然后尝试隐式地将 - 转换为数字并失败,从而导致错误。因此,将数字转换为varchar数据类型可以解决您遇到的问题。注意:您不需要将' - '转换为varchar(10),它已经是字符数据。 – xQbert

+0

不知道这件简单的事情。谢谢你的解释。 – Oleg

+0

很高兴帮助,并很高兴你能弄清楚该怎么做。我所做的只是提供原因。我发现知道为什么有帮助!另请注意:在Excel中,您可以传入0而不是 - 并且Excel将格式化为零作为破折号。我相信它被称为会计风格(或者从主菜单下的工具栏中选择',',号码为 – xQbert

0

这里给出了在Excel中,您可以设置格式的图片的-

你可能会更好传递一个零,而不是短跑并允许excel格式化使0 a - (当然假设输出进入excel)

请注意以下在E20中将0值转换为 - 当记帐格式(逗号格式) 用来。

另请注意,当会计 - 缩进时,常规破折号是如何左对齐的。

enter image description here

相关问题