Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server错误的结果_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server错误的结果

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),

我在两个不同的表上使用了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), 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