Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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/7/sql-server/22.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
T-sql;使用SUM()添加正值和负值_Sql_Sql Server_Variables_Calculated Columns - Fatal编程技术网

T-sql;使用SUM()添加正值和负值

T-sql;使用SUM()添加正值和负值,sql,sql-server,variables,calculated-columns,Sql,Sql Server,Variables,Calculated Columns,我以前没有做过任何t-SQL,我想知道如何更改下面的脚本来区分正值和负值。目前,这似乎只是将两者相加并给出错误的值 我想添加一个IF条款,s.summa将遵循以下规则: e、 g -1+-1=-2 1+-1=0 1+1=2 如果我现在是正确的,它将被处理为“etumerkki”,因此,如果etumerkki变量为0,则sum将转换为负值,如果未设置etumerkki变量,则保持正常 SET @stmt = CONCAT( 'INSERT INTO tbl_1 (rivi,rivi_id,isan

我以前没有做过任何t-SQL,我想知道如何更改下面的脚本来区分正值和负值。目前,这似乎只是将两者相加并给出错误的值

我想添加一个IF条款,s.summa将遵循以下规则: e、 g

-1+-1=-2

1+-1=0

1+1=2

如果我现在是正确的,它将被处理为“etumerkki”,因此,如果etumerkki变量为0,则sum将转换为负值,如果未设置etumerkki变量,则保持正常

SET @stmt = CONCAT( 'INSERT INTO tbl_1 (rivi,rivi_id,isanta_rivi,taso,lihavointi,tili_rivi,otsikko,selite,summa)
                        SELECT  t.rivi , t.rivi_id , t.isanta_rivi , t.taso , t.lihavointi , t.rivi_tyyppi , t.otsikko , t.selite , 
                                CASE etumerkki
                                    WHEN 0 THEN -1 * IFNULL(SUM(s.summa),0.00) 
                                    ELSE IFNULL(SUM(s.summa),0.00) 
                                END AS summa
                        FROM tase_mem t
                                LEFT JOIN kuutio_paakirja s ON s.tili = t.tili
                        WHERE   ' , nyk_summa_ehto , ' 
                                AND s.kpaikka_id = ' , kpaikka_id , ' AND s.projekti_id = ' , projekti_id , ' ' , isanta_ehto , '
                        GROUP BY t.rivi , t.rivi_id , t.taso , t.lihavointi , t.rivi_tyyppi , t.etumerkki , t.otsikko , t.selite;');
    PREPARE stmt FROM @stmt;
    EXECUTE stmt;

提前谢谢

不确定我是否遵守了

SUM()
确实正确地计算有符号的数字。如 和(1,-1)=0,和(-1,-1)=2,和(1,1)=2 见:

但是,在查询中,您写入IFNULL(SUM(s.summa),0.00): 这意味着您的查询首先对所有s.summa求和,然后计算IFNULL


我想在将s.summa添加到一起之前,您需要求值s.summa是否为null。将查询更改为SUM(IFNULL(s.summa),0.00)应该会给出正确的结果。

您所说的要执行的操作似乎已经在查询中了。有什么问题吗?当我得到第二年的结果时,它没有正确处理。示例100+-50=-150。因此,它读取前两个值,但只是将它们相加,不考虑减号
select sum(a)
from (
          select 1 as a
union all select -1 
) i

select sum(a)
from (
          select -1 as a
union all select -1 
) i

select sum(a)
from (
          select 1 as a
union all select 1 
) i