Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何添加带有计算的case语句?_Sql_Sql Server_Case - Fatal编程技术网

Sql 如何添加带有计算的case语句?

Sql 如何添加带有计算的case语句?,sql,sql-server,case,Sql,Sql Server,Case,我尝试了SAP Business One数据库中的一个案例陈述,通过考虑税收类型来获得不含税的首期付款金额。但它返回了以下错误 '将数据类型varchar转换为数字时出错。' 这是我的代码供参考 select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else '' end) from DPI1 这在没有如下情况的情况下有效: select (cast(LineTotal as decim

我尝试了SAP Business One数据库中的一个案例陈述,通过考虑税收类型来获得不含税的首期付款金额。但它返回了以下错误

'将数据类型varchar转换为数字时出错。'

这是我的代码供参考

select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else '' end) from DPI1
这在没有如下情况的情况下有效:

select (cast(LineTotal as decimal(22,8)) /1.02)  from DPI1
错误是什么。我怎样才能克服这个问题

select (case when taxcode = 'NBT2' then (cast(LineTotal as decimal(22,8)) /1.02) else null end) from DPI1

使用上面的查询

当您使用
CASE
表达式时,CASE的两个输出都应该返回相同的数据类型,否则将导致
CAST
错误

正如@Larnu所说,隐式转换只会发生在
Int
/
Float
上,而不会发生在
Decimal
上,所以当您在case表达式中返回Decimal时,您需要显式转换,否则将返回0或null

在您的情况下,
CAST(LineTotal为十进制(22,8))/1.02
return
NULL
否则返回空字符串,这将导致错误


大小写
表达式<代码>Case(
Switch
)语句在t-SQL中不存在。当您将
ELSE
分支中的空字符串(
'
)替换为
NULL
?@stickybit时,会发生什么情况?这就是错误。我应该被更正为LineTotal,而不是“No@Larnu”。这应该是错误,请检查您的查询这里显然咖啡还没有设置<代码>'可以隐式转换为
int
,brain刚才说的是“数字”数据类型。@SQL Server''中的Larnu字符串不会隐式转换为数字数据类型,我们可以显式将其转换为as
cast(''as int)
。。。你同意我的回答吗?不,那不是真的,@Neverdie
decimal
/
Numeric
float
/
real
int
的行为都截然不同。请注意,只有
decimal
失败,而不是
float
int
@Larnu是的,我同意这一点,但用户希望以
decimal
输出。
SELECT (CASE WHEN taxcode = 'NBT2' THEN (CAST(LineTotal AS decimal(22,8)) /1.02) 
             ELSE 0.0 END) 
FROM DPI1
SELECT (CASE WHEN taxcode = 'NBT2' THEN (cast(LineTotal AS decimal(22,8)) /1.02) 
             ELSE NULL END) 
FROM DPI1