除以零错误唯一零

时间:2018-01-17 15:03:25

标签: tsql

我有下表:

Item         Ordqty Total_Costprice TotalSaleprice  onhand  Markup
ENG-MAN-0102                3852    203.34           2494     73.992
SPG-P-018                   2716   1232.80      473.2232
A8                          8.62    9.335                    0.71
A136                        1621    148.35           518    0.3777
LA                  1228    7.68    14.897                   7.217
ENG-DOR             1039    34.94   50.8166                15.8766
A13-00-S               968  153.64    107                   0.9997​

代码是

SELECT
    total_costprice, 
    markup,
    CASE WHEN markup=0 THEN 0 ELSE 100*(markup)/costprice AS pctmarkup`

这给出了除以零的误差。我需要显示标记值的百分比标记。

2 个答案:

答案 0 :(得分:1)

您需要使用NULLIF功能

select
   total_costprice
   ,markup
   ,case when markup=0 then 0 else 100*(markup/NULLIF(costprice,0)) END as pctmarkup

答案 1 :(得分:0)

根据您的值,这将有效。我插入了0,你没有任何数据 - 我不知道这是不是真的。

declare @myt table (item nvarchar(50),ordqty int, total_costprice numeric(18,4),totalsalesprice numeric(18,4),onhand numeric(18,4),markup numeric(18,4)
)

insert into @myt
values 


('ENG-MAN-0102',      0    ,   3852   ,  203.34   ,        2494     , 73.992    ),
('SPG-P-018'   ,      0    ,   2716   ,  1232.80  ,        473.2232 , 0         ),
('A8'          ,      0    ,   8.62   ,  9.335    ,        0        , 0.71      ),
('A136'        ,      0    ,   1621   ,  148.35   ,        518      , 0.3777    ),
('LA'          ,      1228 ,   7.68   ,  14.897   ,        0        , 7.217     ),
('ENG-DOR'     ,      1039 ,   34.94  ,  50.8166  ,        0        , 15.8766   ),
('A13-00-S'    ,      968  ,   153.64 ,  107      ,        0        , 0.9997​   )

select * ,CASE WHEN markup=0 THEN 0 ELSE 100*(markup)/total_costprice end as Pct from @myt

<强>结果

enter image description here