SQL Query在有数据时返回0

时间:2018-01-12 14:27:45

标签: sql sql-server

我有以下SQL查询:

SELECT
    a.IA
  , a.PC
  , a.LC
  , a.CXPevalCnt
  , ((a.IA / nullif(a.CXPevalCnt,0))*0.35) as IAcalc
  , ((a.LC / nullif(a.CXPevalCnt,0))*0.5) as legacalc
  , ((a.PC / nullif(a.CXPevalCnt,0))*0.15) as pccalc
  , (
      ((a.IA / nullif(a.CXPevalCnt,0))*0.35)
    + ((a.LC / nullif(a.CXPevalCnt,0))*0.5)
    + ((a.PC / nullif(a.CXPevalCnt,0))*0.15)
  ) as Compliance 
FROM 
(
  SELECT
      SUM(IA) as IA
    , SUM(PC) as PC
    , SUM(LC) as LC
    , SUM(CXPevalcount) as CXPevalCnt
  FROM
    tblPLOps_Data
) as A

返回以下数据:

IA PC   LC   CXPevalCnt  IAcalc  legacalc pccalc  Compliance

15 12   15      15        0.35    0.5        0     0.85

如果PC为12且CXPevlacnt为15,我无法弄清楚为什么在我的查询中我将它们加在一起时cxpevalcount为空,但仅适用于PC,而不是与IA或LC一起使用时。我已经通过许多不同方式对此查询进行了切分,并且无法找出问题

任何想法?

1 个答案:

答案 0 :(得分:1)

因为你正在进行整数除法。 12/15 = 0.如果你想做准确的数学运算,你需要将其中一个乘以1.0或转换为强制sql进行数字除法。

((a.PC * 1.0) / nullif(a.CXPevalCnt, 0)) * 0.15 as pccalc

您也需要为其他列执行相同的操作。