sql汇总查询的问题{浮点数据运算}
请教问题:
我有两个表,
表1:tel_info包含了部门,电话号码,等字段,一个部门可以有多个电话号码
表2:tel_feiyong,包含了电话号码,时间,通话费,信息费,XX费
我想通过汇总查询两个表,得到如下数据:
部门,电话,电话费汇总,信息费汇总,XX费汇总
可是我在查询的过程中,老是出现汇总出来的数据不正确的情况,请问大家如何解决
汇总字段是FLOAT(menoy 也试了)
SELECT tel_info.外线号码, tel_info.部门, Sum(tel_feiyong.基本通话费) AS 基本通话费之总计
FROM tel_info INNER JOIN tel_feiyong ON tel_info.外线号码 = tel_feiyong.电话号码
GROUP BY tel_info.外线号码, tel_info.部门;
最后得到的基本通话费之总计是很多小数位的数据
用ROUND四舍后,数据还是不准确.
不知如何解决
[解决办法]
浮点数据是近似数据,无法做到绝对的准确.
float 和 real用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。语法float [ ( n ) ]从 - 1.79E + 308 到 1.79E + 308 之间的浮点数字数据。n 为用于存储科学记数法 float 数尾数的位数,同时指示其精度和存储大小。n 必须为从 1 到 53 之间的值。n 所在范围 精度 存储大小 1-24 7 位数 4 字节 25-53 15 位数 8 字节 Microsoft® SQL Server? float[(n)] 数据类型对于从 1 到 53 之间的所有 n 值均符合 SQL-92 标准。double precision 的同义词为 float(53)。real从 ?3.40E + 38 到 3.40E + 38 之间的浮点数字数据。存储大小为 4 字节。在 SQL Server 中,real 的同义词为 float(24)。
[解决办法]
没数据没真相,按道理你的写法是正确的
[解决办法]
用decimal数据类型:
create table tel_feiyong(电话号码 varchar(20),基本通话费 decimal(18,2),信息费 decimal(18,2),XX费 decimal(18,2))create table tel_info(部门 nvarchar(10),外线号码 varchar(20))insert into tel_info select 'AA','12345678'insert into tel_feiyong select '12345678',23.45,0.40,10.02insert into tel_feiyong select '12345678',11.02,0.50,2.46insert into tel_feiyong select '12345678',20.11,0.30,5.93goSELECT tel_info.外线号码, tel_info.部门, Sum(tel_feiyong.基本通话费) AS 基本通话费之总计FROM tel_info INNER JOIN tel_feiyong ON tel_info.外线号码 = tel_feiyong.电话号码GROUP BY tel_info.外线号码, tel_info.部门godrop table tel_feiyong,tel_info/*外线号码 部门 基本通话费之总计-------------------- ---------- ---------------------------------------12345678 AA 54.58(1 行受影响)*/
[解决办法]
decimal(18,2)