2016-08-17 29 views
0

我有一个很奇怪的问题,这个case语句和公式我得到0这个除法公式,即使我独立运行每个语句我得到正确的数字。如果我删除第二个selet语句,甚至输入数字,我仍然得到零。数字出来到167913/1150972,如果我截断第二个数字1150它的工作,但如果我加入9我得到0返回。公式在返回零的情况下语句

CASE WHEN 
     ISNULL(MAX(JC.JOB_SHIPPED_FLAG), MAX(OE10.ORD_SHIPPED_FLAG)) = 'P' AND ISNULL(MAX(JC.JOB_STATUS_FLAG), MAX(OE10.ORD_STATUS_FLAG)) = 2 
      THEN (SELECT SUM(CAST(TOT_COST AS INT)) FROM CRCDATA.DBO.LA15 
        WHERE EST_NUMB = MAX(JC.EST_NUMB) AND LA15.QTY_SLOT =1) 
        /
        ((SELECT DISTINCT SUM(CAST(FG14.ONHAND_QTY AS INT)) FROM CRCDATA.DBO.JC11 JC11 
         LEFT OUTER JOIN CRCDATA.DBO.FG14 FG14 ON JC11.FG_ITEM_NUMB = FG14.ITEM_NUMB 
          WHERE JC11.FG_ITEM_NUMB LIKE '0000000%' AND JC11.STATUS_FLAG = 'P' AND FG14.LOC <> 'rej') + 
      (SELECT SUM(CAST(SHIPTO_FAX AS INT)) FROM CRCDATA.DBO.SH10 WHERE RECORD_TYPE = 'B' AND PROCESS_FLAG = 4 AND SH10.JOB_NUMB = A.JobNumber)) 


     ELSE 0 
     END [TEST] 
+0

你返回一个int? '167913/1150972'转移到'0.14588 ...',将舍入到整数0 –

+0

这是整个陈述,还是只是一个更大的查询的一部分?哪个dbms? (有些非ANSI SQL ......) – jarlh

+0

@jarlh它是更大查询的一部分。它也是mssql –

回答

1

您将不得不将分配器或股息中的任何一个投射到FLOAT。即

SELECT CAST(val1 AS FLOAT)/val2 

OR

SELECT val1/CAST(val2 AS FLOAT) 
+0

工作。通常我在使用int时始终使用金钱往往是圆的? –

+0

是的,铸造int总是向下。您可以通过将float值转换为int来检查自己。 – aadi

0

只需添加 “+.0” 你的价值观之一

例如

Select 5/20  Return 0 
Select 5/(20+.0) Return 0.2500000 
相关问题