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. 显式转换数据类型:

  • 使用 CASTCONVERT 函数将其中一个 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;