Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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求和_Sql_Sql Server_Select_Sum - Fatal编程技术网

带条件的SQL求和

带条件的SQL求和,sql,sql-server,select,sum,Sql,Sql Server,Select,Sum,我有一个需要求和值的查询,但在我的表的一列中,有一个递增和递减值 对于递减值,它的值需要为负值,即使它在表中存储为正值 而对于递增的值,它保持为正值 我的查询如下所示: SELECT SUM( CASE WHEN ACTIVITY_TYPE = '0' THEN -(ACTIVITY_VALUE) ELSE ACTIVITY_VALUE END ) AS NEW_ACTIVITY_VALUE FROM V_EMPLOYEE_

我有一个需要求和值的查询,但在我的表的一列中,有一个递增和递减值
对于递减值,它的值需要为负值,即使它在表中存储为正值
而对于递增的值,它保持为正值

我的查询如下所示:

SELECT
    SUM(
        CASE WHEN ACTIVITY_TYPE = '0' THEN -(ACTIVITY_VALUE)
        ELSE ACTIVITY_VALUE
        END
        ) AS NEW_ACTIVITY_VALUE
FROM V_EMPLOYEE_PAYACT
WHERE ACTIVITY_TYPE IN ('0','1') 
    AND EMPLOYEE_NO = '00002789' 
    AND ((YEAR = 2014 AND MONTH <= 4)
        OR
        (YEAR > 2013 AND YEAR <2014)
        OR
        (YEAR = 2013 AND MONTH >= 5)) 
GROUP BY YEAR, MONTH
选择
总数(
活动类型为“0”时的情况,然后-(活动值)
其他活动值
结束
)作为新的\u活动\u值
来自V_EMPLOYEE_PAYACT
其中活动\输入('0','1'))
员工编号为“00002789”
和((年=2014年,月=2013年,年=5))
按年份、月份分组
它返回以下结果:
新的活动值
391.00
-600.00


我需要将值设置为-209(这两个数字的总和)

您当前正在按照月份和年份的唯一组合对总和进行分组。如果您想要总计,只需删除
group by
子句:

SELECT
    SUM(
        CASE WHEN ACTIVITY_TYPE = '0' THEN -(ACTIVITY_VALUE)
        ELSE ACTIVITY_VALUE
        END
        ) AS NEW_ACTIVITY_VALUE
FROM V_EMPLOYEE_PAYACT
WHERE ACTIVITY_TYPE IN ('0','1') 
    AND EMPLOYEE_NO = '00002789' 
    AND ((YEAR = 2014 AND MONTH <= 4)
        OR
        (YEAR > 2013 AND YEAR <2014)
        OR
        (YEAR = 2013 AND MONTH >= 5)) 
选择
总数(
活动类型为“0”时的情况,然后-(活动值)
其他活动值
结束
)作为新的\u活动\u值
来自V_EMPLOYEE_PAYACT
其中活动\输入('0','1'))
员工编号为“00002789”
和((年=2014年,月=2013年,年=5))
试试这个:

SELECT
    SUM(
        CASE
        WHEN ACTIVITY_TYPE = '0' THEN
            - (ACTIVITY_VALUE)
        ELSE
            ACTIVITY_VALUE
        END
    ) AS NEW_ACTIVITY_VALUE
FROM
    V_EMPLOYEE_PAYACT
WHERE
    ACTIVITY_TYPE IN ('0', '1')
AND EMPLOYEE_NO = '00002789'
AND (
    (YEAR = 2014 AND MONTH <= 4)
    OR (YEAR > 2013 AND YEAR < 2014)
    OR (YEAR = 2013 AND MONTH >= 5)
)
选择
总数(
案例
当活动类型为“0”时,则
-(活动值)
其他的
活动值
结束
)作为新的\u活动\u值
从…起
雇员薪酬法案
哪里
活动\键入('0','1')
员工编号为“00002789”
及(
(年份=2014年和2013年,年份<2014年)
或(年份=2013,月份>=5)
)

跳过分组。@jarlh非常感谢您!它起作用了!谢谢大家!@HotseeToSee
(年份>2013和年份)