我正在尝试编写一条SQL语句,表明正在给出什么样的佣金。我坚持最后一部分,显示了给出的百分比,因为SQL不会将char值转换为money。 我是新手,所以我的转换尝试可能完全是假的。
CASE
WHEN VehicleSales.CommissionSP1 ='500' then 'Flat'
WHEN VehicleSales.CommissionSP1 = '0' then 'Not Applicable'
else Convert(int, VehicleSales.CommissionSP1) / Convert (int, VehicleSales.GrossProfit)
END AS Commission_Type
答案 0 :(得分:0)
我会在分母中抛出一个浮点数并输入逻辑以防止被零除:
CASE
WHEN VehicleSales.CommissionSP1 ='500' then 'Flat'
WHEN VehicleSales.CommissionSP1 = '0' then 'Not Applicable'
else cast(VehicleSales.CommissionSP1 as int)/ case when cast(VehicleSales.GrossProfit as float)=0 then 1 else cast(VehicleSales.GrossProfit as float) end
END AS Commission_Type
答案 1 :(得分:0)
此处case
表达式存在两个问题:
case
表达式中返回多种数据类型。如果您绝对需要返回Flat
,Not Applicable
或百分比,则需要将该百分比作为nvarchar
/ varchar
字符串返回:
case VehicleSales.CommissionSP1
when '500' then 'Flat'
when '0' then 'Not Applicable'
else convert(nvarchar(20),isnull(convert(int,VehicleSales.CommissionSP1)
/ nullif(convert(decimal(10,2),VehicleSales.GrossProfit),0)
,0)
)
end as Commission_Type
我建议您不要在同一列中返回Flat
和Not Applicable
值作为百分比。就个人而言,我会选择一个包含佣金类型的列,另一个包含相关值的列。这样,您可以在佣金类型组中进行汇总,而无需一直担心convert
您的数据:
select case VehicleSales.CommissionSP1
when '500' then 'Flat'
when '0' then 'Not Applicable'
else 'Percentage'
end as Commission_Type
,case VehicleSales.CommissionSP1
when '500' then 500 -- I am assuming you actually have some way of knowing what is flat beyond hard coding values here.
when '0' then 0
else isnull(convert(int,VehicleSales.CommissionSP1)
/ nullif(convert(decimal(10,2),VehicleSales.GrossProfit),0)
,0)
end as Commission
答案 2 :(得分:0)
它会将varchar转换为smallmoney。学会打破这个问题。
列(甚至是大小写)只能是一种数据类型。
这不会保护varchar中的数字或利润除以零。
declare @T table (com varchar(10), profit varchar(10));
insert into @T values ('0', '1000'), ('500', '1000'), ('12', '1000'), ('100', '1000');
select t.*, cast(com as smallmoney) comM, CAST(profit as smallmoney) as profitM
, case com when '0' then 'Flat'
when '500' then 'Not Applicable'
else cast(cast(com as smallmoney) /
CAST(profit as smallmoney) as varchar(100))
end as smart
from @T t