公式在返回零的情况下语句
问题描述:
我有一个很奇怪的问题,这个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]
答
您将不得不将分配器或股息中的任何一个投射到FLOAT。即
SELECT CAST(val1 AS FLOAT)/val2
OR
SELECT val1/CAST(val2 AS FLOAT)
+0
工作。通常我在使用int时始终使用金钱往往是圆的? –
+0
是的,铸造int总是向下。您可以通过将float值转换为int来检查自己。 – aadi
答
只需添加 “+.0” 你的价值观之一
例如
Select 5/20 Return 0
Select 5/(20+.0) Return 0.2500000
你返回一个int? '167913/1150972'转移到'0.14588 ...',将舍入到整数0 –
这是整个陈述,还是只是一个更大的查询的一部分?哪个dbms? (有些非ANSI SQL ......) – jarlh
@jarlh它是更大查询的一部分。它也是mssql –