Sta*_*hts 2 sql-server t-sql sql-server-2008-r2
我正在尝试在 SQL Server 2008 中进行计算,但得到的结果不正确。下面是示例 DDL 和我使用的查询,应该如何重写我的语句以产生准确的结果?
我想要的结果是:
0.000029
0.000277142
0.003001501
0.000960527
0.004321608
Run Code Online (Sandbox Code Playgroud)
这是 DDL 和查询:
Declare @TableTest Table
(
fid int
,field1 int
,field2 int
,field3 int
,field4 int
)
INSERT INTO @TableTest (fid, field1, field2, field3, field4) Values
(1, 17, 12, 0, 1000000),
(2, 277, 0, 511, 1000000),
(3, 3000, 0, 500, 1000000),
(4, 900, 59, 1590, 1000000),
(5, 1300, 3000, 5000, 1000000)
Run Code Online (Sandbox Code Playgroud)
产生这个结果(不正确)
fid (No column name)
1 0.0000000000
2 0.0000000000
3 0.0000000000
4 0.0000000000
5 0.0000000000
Run Code Online (Sandbox Code Playgroud)
编辑
如下所示,这是一个数据类型问题,我将列从 更改int为decimal(10,2),现在得到了预期的结果 - 下面是更新的 DDL
Declare @TableTest Table
(
fid int
,field1 decimal(10,2)
,field2 decimal(10,2)
,field3 decimal(10,2)
,field4 decimal(10,2)
)
INSERT INTO @TableTest (fid, field1, field2, field3, field4) Values
(1, '17.00', '12.00', NULL, '1000000.00'),
(2, '277.00', NULL, '511.00', '1000000.00'),
(3, '3000.00', NULL, '500.00', '1000000.00'),
(4, '900.00', '59.00', '1590.00', '1000000.00'),
(5, '1300.00', '3000.00', '5000.00', '1000000.00')
Select
fid,
SUM((ISNULL(field1,0)+ISNULL(field2,0))/(NULLIF(ISNULL(field4,0)-ISNULL(field3,0),0)))
FROM @TableTest
GROUP BY fid
ORDER BY fid
Run Code Online (Sandbox Code Playgroud)
在计算,我用得到我想要的输出是:
(field1+field2)/(field4-field3)
Run Code Online (Sandbox Code Playgroud)
看截图,我通过在 Excel 中手动进行计算来验证 SSMS 中的公式,这就是我意识到有些问题的方式
您遗漏了一些需要帮助的信息。您所展示的只是@TableTest 和数据的插入。
Declare @TableTest Table
( fid int ,field1 int ,field2 int ,field3 int ,field4 int );
INSERT INTO @TableTest (fid, field1, field2, field3, field4)
Values
(1, 17, 12, 0, 1000000),
(2, 277, 0, 511, 1000000),
(3, 3000, 0, 500, 1000000),
(4, 900, 59, 1590, 1000000),
(5, 1300, 3000, 5000, 1000000);
select * from @tabletest
Run Code Online (Sandbox Code Playgroud)
如您所见,如果您运行该脚本,Select @TableTest您插入的内容将被显示。
实际上,如果您将字段field1, field2, field3, field4从更改为INT,DECIMAL那么数据将是适合您计算的数据类型。
这是我的计算:
代码:
select fid, (field1+field2)/ (field3+field4) from @TableTest
Run Code Online (Sandbox Code Playgroud)
结果:
fid (No column name)
1 0.0000290000000000000
2 0.0002768585252935749
3 0.0029985007496251874
4 0.0009574776105991473
5 0.0042786069651741293
Run Code Online (Sandbox Code Playgroud)
但是,这与您的预期答案很接近,但并不准确。这可能是因为数据类型错误。
请提供足够的信息以便正确计算。
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |