Sql server SQL Server错误的结果
我在两个不同的表上使用了select,返回值必须是相同的,但不是,我无法计算出来,所以我们在这里Sql server SQL Server错误的结果,sql-server,tsql,Sql Server,Tsql,我在两个不同的表上使用了select,返回值必须是相同的,但不是,我无法计算出来,所以我们在这里 update oper set OdenecekTutar = (select case when round(sum(rezervasyon.odeme_satis_kalan), 2) is not null then round(sum(rezervasyon.odeme_satis_kalan),
update oper
set OdenecekTutar =
(select
case
when round(sum(rezervasyon.odeme_satis_kalan), 2) is not null
then round(sum(rezervasyon.odeme_satis_kalan), 2)
else 0
end
from rezervasyon
where rezervasyon.oper = oper.operID)
select round(sum(oper.OdenecekTutar),2) as borc_from_oper from oper
//borc_from_oper => 1372283,38
select round(sum(odeme_satis_kalan),2) as borc_from_oper2 from rezervasyon
//borc_from_oper2 => 1372283,35
表2中的关系
oper.operID one rezervasyon.oper有很多
oper.total/\*total
price of all rezervasyons price this case this column'OdenecekTutar'\*/
sum(rezervasyon.price/\*本例中此列为'odeme\u satis\u kalan'\*/)
那么,我的代码有什么问题吗?如果不使用round函数,结果是否相同?如果是这样,就不要在update语句中取整 您还可以将您的案例陈述更改为:
round(sum(ISNULL(rezervasyon.odeme_satis_kalan, 0)),2)
差异仅仅是因为[oper]中的更新值是四舍五入的 但是[rezervasyon]中的值不是四舍五入的。
而最后一个查询对所有记录进行求和。
不超过分组的四舍五入总数 下面是一个示例片段,以演示该效果: 就个人而言,我不会在更新中对其进行舍入,并使用具有足够精度的[OdenecekTutar]类型。
但我猜这是必需的,因为[OdenecekTutar]的类型是十进制(N,2)
此外,如果[rezervasyon]中有operId与[oper]不匹配的记录,结果仍然会不同 一,。你想通过案例陈述2实现什么。JOIN 3在哪里。样本输入和结果4。错误代码我有两个不同的表和两个不同的案例1案例是保存我的总价另一个是全部售出的服务详细信息,但我不能用相同的数据得到相同的结果请阅读一些改进问题的提示。我的代码只是您案例陈述的一个紧凑形式。。。但是你应该尽量不要在更新中舍入
declare @oper table (operID int primary key, OdenecekTutar decimal(10,2));
insert into @oper (operID) values (1),(2),(3);
declare @rezervasyon table (rezervasyonID int identity(1,1) primary key, oper int, odeme_satis_kalan decimal(10,4));
insert into @rezervasyon (oper, odeme_satis_kalan) values (1,10.018),(1,20.028),(2,30.018),(2,40.028);
select * from @rezervasyon;
update o
set OdenecekTutar = coalesce(round(r.sum_odeme_satis_kalan, 2) ,0)
from @oper as o
left join (select oper, sum(odeme_satis_kalan) as sum_odeme_satis_kalan from @rezervasyon group by oper) as r
on (r.oper = o.operID);
select * from @oper;
select round(sum(OdenecekTutar),2) as round_sum_OdenecekTutar from @oper;
-- Result: round_sum_OdenecekTutar = 100.10
select round(sum(odeme_satis_kalan),2) as round_sum_odeme_satis_kalan, sum(odeme_satis_kalan) as sum_odeme_satis_kalan from @rezervasyon;
-- Result: round_sum_odeme_satis_kalan = 100.0900
--
-- Group first, then sum
--
select sum(round_sum_odeme_satis_kalan) as total_round_sum_odeme_satis_kalan from (select oper, round(sum(odeme_satis_kalan),2) as round_sum_odeme_satis_kalan from @rezervasyon group by oper) q;
--Result: total_round_sum_odeme_satis_kalan = 100.1000