2016-08-17 58 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 
相關問題