SQL SERVER 使用SUM(A)/SUM(B)统计时得到的是整数而不是小数, A,B字段设为整数才会出现,
原因:
在 SQL Server 中,两个整数相除会执行整数除法,结果会截断小数部分,只保留整数部分。 示例: sql -- 假设表 Table1 有两列,A 和 B,都是整数类型 SELECT SUM(A) / SUM(B) AS Result FROM Table1;
如果 SUM(A)
是 10,SUM(B)
是 3,那么 10 / 3
的结果会是 3,而不是 3.333…
SQL Server 在进行运算时会考虑数据类型优先级。如果参与运算的都是整数类型,结果也会是整数类型。 解决方案: 为了得到小数结果,你需要确保至少有一个操作数是小数类型。
以下是一些常用的解决方案:
1. 显式转换数据类型:
使用
CAST
或CONVERT
函数将其中一个SUM
的结果转换为小数类型(例如DECIMAL
,FLOAT
,REAL
)。 示例:
sql SELECT CAST(SUM(A) AS DECIMAL(18, 2)) / SUM(B) AS Result FROM Table1;
或者:SELECT SUM(A) / CAST(SUM(B) AS DECIMAL(18, 2)) AS Result FROM Table1; ```
或者:
```sql SELECT CAST(SUM(A) AS DECIMAL(18, 2)) / CAST(SUM(B) AS DECIMAL(18, 2)) AS Result FROM Table1; ```
- `DECIMAL(18, 2)` 表示总共 18 位数字,其中 2 位是小数。你可以根据实际需要调整精度。
2. 乘以 1.0:
将其中一个 `SUM` 的结果乘以 `1.0`,这会将整数转换为小数。
**示例:**
```sql SELECT SUM(A) * 1.0 / SUM(B) AS Result FROM Table1;
或者: sql SELECT SUM(A) / (SUM(B) * 1.0) AS Result FROM Table1;