之前我没有做任何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;
提前致谢
答案 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)可以为您提供正确的结果。