2013-09-25 55 views
0

我正在使用db2,不知道什么版本。尝试对表格进行求和时出现溢出错误。我认为我可以将总和转换为BIGINT,这似乎适用于总数,但我希望得到一个百分比,当我投入BIGINT时,我的数据不准确。如何获得Percent_DeliveredB/A的准确百分比?将分子和分母转换为BIGINT并除以百分数不会给我正确的结果。算术溢出或其他算术异常发生的解决方案?

这里是我的脚本:

SELECT 
FAT.DIM_BUILDING_ID, 
FAT.BUILDING_NAME, 
SUM(CAST(FAT.AMOUNT AS BIGINT)) AS SALES_SUM, 
SUM(CAST(FAT.ORDERS AS BIGINT)) AS ORDERS_SUM, 
SUM(CAST(FAT.CAPABILITY AS BIGINT)) AS CAPABILITY_SUM, 
SUM(FAT.ORDERS_B)/sum(FAT.Amount) AS Percent_DeliveredB, 
SUM(FAT.ORDERS_A)/sum(FAT.Amount) AS Percent_DeliveredA, 
SUM(CAST(FTS.GROUP_A AS BIGINT)) AS GROUP_A, 
SUM(CAST(FTS.GROUP_B AS BIGINT)) AS GROUP_B, 
SUM(CAST(FTS.GROUP_C AS BIGINT)) AS GROUP_C 

FROM ORDERS AS FAT 
INNER JOIN GROUPS AS FTS ON FAT.DIM_PROJECT_ID = FTS.DIM_PROJECT_ID 
GROUP BY FAT.DIM_BUILDING_ID, FAT.BUILDING_NAME; 

我尝试以下,但它与0回来的百分比。

SUM(CAST(FAT.ORDERS_B AS BIGINT))/sum(CAST(FAT.Amount AS BIGINT)) AS Percent_DeliveredB 
+0

你的问题是什么? – mustaccio

+0

我编辑了我的问题。希望它更清楚。 – Tone

回答

1

我能够得到正确的结果转换为双倍。

SUM(CAST(FAT.ORDERS_B AS DOUBLE))/sum(CAST(FAT.Amount AS DOUBLE)) AS Percent_DeliveredB, 
1

这是给你一个正确的结果,小于1的任何值,转换为一个整数(或BIGINT为此事)时将被截断为0,很明显。如果你期待一个分数,使用十进制或浮点数据类型:

cast(SUM(FAT.ORDERS_B) as decimal(10,2))/
cast(sum(FAT.Amount) as decimal(10,2)) AS Percent_DeliveredB 

使用正确的精度满足您的需求,当然。