我是一个新手,正在使用AdventureWorks2012
数据库学习 T-SQL。我使用的是 SQL Server 2014,但也适用于 2008 的解决方案会很棒。我得到了以下练习:
使用 Sales.SpecialOffer 表编写查询。显示 MinQty 和 MaxQty 列以及 SpecialOfferID 和 Description 列之间的差异。
问题是,MaxQty
允许空值,所以我试图为不涉及在其中留下空值的输出提出一个真实世界的解决方案。但是,当我尝试使用 coalesce 返回“No Max”时(是的,我知道我可以将 NULL 留在那里,但我想看看我是否能解决这个问题),我得到的消息是varchar
value ' No Max' 无法转换为数据类型int
。我假设这是因为MaxQty - MinQty
优先int
?
select
specialofferid
, description
, coalesce((maxqty - minqty),'No Max') 'Qty_Difference'
from
sales.specialoffer;
错误:
消息 245,级别 16,状态 1,行 135
将 varchar 值“无最大值”转换为数据类型 int 时转换失败。
我想过只返回一个无意义的整数(0 或负数),但这似乎并不完美 - 如果返回 0,我会掩盖结果实际上为零的情况,等等。
想法?