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

时间:2014-05-09 12:16:39

标签: sql sql-server variables calculated-columns

之前我没有做任何T-SQL,并且想知道如何更改下面的脚本来区分正值和负值。目前似乎只是将两者加在一起并给出错误的值。

我想添加一个s.summa遵循规则的IF子句:  例如

  

-1 + -1 = -2

     

1 + -1 = 0

     

1 + 1 = 2

如果我现在正确处理“etumerkki”,那么如果etumerkki变量为0,则s.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;

提前致谢

1 个答案:

答案 0 :(得分:1)

不确定我是否跟着......

SUM()

确实正确地评估了有符号数字。例如 sum(1,-1)= 0,sum(-1,-1)= - 2 sum(1,1)= 2 参见:

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

但是,在您的查询中,您编写 IFNULL(SUM(s.summa),0.00): 这意味着您的查询首先对所有s.summa和AFTER求和IFNULL进行求和。

我想你想在将它们加在一起之前评估s.summa是否为null。将查询更改为 SUM(IFNULL(s.summa),0.00)可以为您提供正确的结果。