2016-08-17 6 views
0

私はこのステートメントと数式で本当に変わった問題を抱えています。ここでは、各ステートメントを独立して実行すると正しい数値が得られます。 2番目のselet文を削除しても、数字を入力しても0になります。数字は167913/1150972になります。もし2番目の数字を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

たとえば自分の価値観の1

に "+.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

それは働いた。通常、キャスト時に整数を常に丸めます。 –

+0

はい、キャスト整数は常に丸められます。 float値をintにキャストすることで自分自身を確認することができます。 – aadi

0

だけ

Select 5/20  Return 0 
Select 5/(20+.0) Return 0.2500000 
関連する問題