2016-03-03 72 views
0

我有一个数据库根据标签确定不同的值。标签决定它是否是免除的价值。例如,2 =不予豁免,3 =豁免。如果我运行一个查询我的结果是这个样子数据库返回0的结果小于1

|Name |EXEMPT VALUE|NON EXEMPT VALUE|Total Value| 
|X  |100.00  |200.00   |300.00  | 
|Y  |0.00  |4.50   |4.50  | 

Y的豁免值的值实际上比一个,0.30以下的数。 我没有创建数据库,所以我没有控制值的数据类型。数据类型是数字,这是我的查询返回值为0.00的原因?我应该将这些数字作为另一个数据类型来获得正确的结果。我的查询如下。

SELECT 
    NAME 
    ,SUM(CASE WHEN EXEMPTIONSTATUS = 2 THEN TOTAL_VALUE ELSE 0 END) AS 'NON EXEMPT VALUE' 
    ,SUM(CASE WHEN EXEMPTIONSTATUS = 3 THEN TOTAL_VALUE ELSE 0 END) AS 'EXEMPT VALUE' 
    SUM(TOTAL_VALUE) AS 'TOTAL VALUE' 
    FROM ORDER_ACCOUNT JOIN ACCOUNT_INVOICE 
    WHERE ORDER_ACCOUNT.DATE BETWEEN 'M/D/YEAR' AND 'M/D/YEAR' 
    GROUP BY NAME 
    ORDER BY NAME ASC 
+0

使用VALUE忘记您的查询的同时,与添加的INT到NUMERICS玩一下。这会突出显示您所看到的内容。 –

+0

以及我所有的数据类型都是数字,我正在运行的查询中没有整数。我在质疑的是,如果数字具有小数的精度,为何会发生这种情况。 – walangala

+3

'ELSE 0 END' - 有一个INT –

回答

0

尝试用* 1.0ELSE 0.0

而且每个SUM

SELECT 
    NAME, 
    SUM(CASE WHEN EXEMPTIONSTATUS = 2 THEN TOTAL_VALUE * 1.0 
      ELSE 0.0 END) AS 'NON EXEMPT VALUE', 
    SUM(CASE WHEN EXEMPTIONSTATUS = 3 THEN TOTAL_VALUE * 1.0 
       ELSE 0.0 END) AS 'EXEMPT VALUE', 
    SUM(TOTAL_VALUE) AS 'TOTAL VALUE' 
FROM ORDER_ACCOUNT JOIN ACCOUNT_INVOICE 
WHERE ORDER_ACCOUNT.DATE BETWEEN 'M/D/YEAR' AND 'M/D/YEAR' 
GROUP BY NAME 
ORDER BY NAME ASC 
+0

不,它只是增加了一个额外的零。另外,对于我以前的总和,这是一个错字 – walangala

+0

尝试'SELECT VALUE FROM ... WHERE EXEMPTIONSTATUS = 3' –

+0

如上所述,没有VALUE列,这是一个错字。如果我'SUM(TOTAL_VALUE)'我得到非豁免值加豁免值,我想要两列将显示这两个值。 – walangala