【问题标题】:SQL: How to Store Integer value in CASE function in sql?SQL:如何在 sql 的 CASE 函数中存储整数值?
【发布时间】:2017-08-17 05:44:45
【问题描述】:

我正在使用 Sybase 数据库。我希望将第三个“WHEN”语句作为整数作为原始值的输出(Round((sum(value)*100),1))。我怎样才能做到这一点。提前致谢。

CASE  WHEN Round((sum(value)*100),1)<0 THEN 'Neg' 
      WHEN Round((sum(value)*100),1)=0 THEN 'N/A'
      WHEN Round((sum(value)*100),1)>0 THEN  Round((sum(value)*100),1)

END AS RCB

注意:这里第 3 行表示错误,因为它是一个整数。我得到的错误是: 错误:- Data exception - data type conversion is not possible. In CASE expression, incompatible data type at result expression 3, ROUND(COALESCE ((SUM(MSTR.SUM.value)*100),0),1)

其次,我尝试了下面的 Else 语句。

CASE  WHEN Round((sum(value)*100),1)<0 THEN 'Neg' 
      WHEN Round((sum(value)*100),1)=0 THEN 'N/A'
     --WHEN Round((sum(value)*100),1)>0 THEN Round((sum(value)*100),1)
      ELSE Round((sum(value)*100),1)
END AS RoRC, 

但仍然得到同样的错误。请帮帮我。谢谢。

【问题讨论】:

  • 添加一些示例数据和所需的输出
  • 不能混合数据类型;您需要每个 WHEN 的结果是所有字符串或所有数字。
  • @Mattew Strawbridge,这就是为什么我要问是否有办法做到这一点。

标签: sql-server database sybase


【解决方案1】:

您需要将cast 的数字设为varchar 以匹配CASE 语句的其他可能结果的类型

CASE  WHEN Round((sum(value)*100),1)<0 THEN 'Neg' 
      WHEN Round((sum(value)*100),1)=0 THEN 'N/A'
      WHEN Round((sum(value)*100),1)>0 THEN  CAST(Round((sum(value)*100),1) as varchar)

【讨论】:

  • 它正在工作。非常感谢 Vojtech Dohnal。第三个条件的输出是(根据我的 sql 数据库)= 27.000000000000。以前是 27。所以你能帮我得到 27.0 吗?
  • 尝试使用 CAST 强制小数位数CAST(CAST(Round((sum(value)*100),1) as numeric(9,1)) as varchar)
  • 再次感谢您。它在方面工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多