Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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_Sql Server_Tsql - Fatal编程技术网

我可以对SQL Server查询结果中的行执行算术运算吗?

我可以对SQL Server查询结果中的行执行算术运算吗?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下疑问: SELECT MATRICULE,ID_POINTAGE,DT_POINTAGE,HH_POINTAGE,CONVERT(VARCHAR,DATEADD(SS,HH_POINTAGE,8),108) GMT,ROW_NUMBER() OVER(PARTITION BY MATRICULE,DT_POINTAGE ORDER BY MATRICULE , DT_POINTAGE) AS NEMRA,CASE WHEN ROW_NUMBER() OVER(PARTITION BY M

我有以下疑问:

SELECT MATRICULE,ID_POINTAGE,DT_POINTAGE,HH_POINTAGE,CONVERT(VARCHAR,DATEADD(SS,HH_POINTAGE,8),108) GMT,ROW_NUMBER() OVER(PARTITION BY MATRICULE,DT_POINTAGE ORDER BY MATRICULE , DT_POINTAGE) AS NEMRA,CASE WHEN ROW_NUMBER() OVER(PARTITION BY MATRICULE,DT_POINTAGE ORDER BY MATRICULE , DT_POINTAGE) % 2 = 1 THEN 'S' ELSE 'E' END ENTREE_SORTIE FROM POINTAGES WHERE MATRICULE = '0118' AND DT_POINTAGE = '30/10/2019'AND HH_POINTAGE NOT IN ((SELECT MAX(HH_POINTAGE) FROM POINTAGES WHERE MATRICULE = '0118' AND DT_POINTAGE = '30/10/2019'),(SELECT MIN(HH_POINTAGE) FROM POINTAGES WHERE MATRICULE = '0118' AND DT_POINTAGE = '30/10/2019'))

--Formatted Query
SELECT MATRICULE,
       ID_POINTAGE,
       DT_POINTAGE,
       HH_POINTAGE,
       CONVERT(varchar, DATEADD(SS, HH_POINTAGE, 8), 108) AS GMT,
       ROW_NUMBER() OVER (PARTITION BY MATRICULE, DT_POINTAGE ORDER BY MATRICULE, DT_POINTAGE) AS NEMRA,
       CASE
            WHEN ROW_NUMBER() OVER (PARTITION BY MATRICULE, DT_POINTAGE ORDER BY MATRICULE, DT_POINTAGE) % 2 = 1 THEN 'S'
            ELSE 'E'
       END AS ENTREE_SORTIE
FROM POINTAGES
WHERE MATRICULE = '0118'
  AND DT_POINTAGE = '30/10/2019'
  AND HH_POINTAGE NOT IN ((SELECT MAX(HH_POINTAGE)
                           FROM POINTAGES
                           WHERE MATRICULE = '0118'
                             AND DT_POINTAGE = '30/10/2019'), (SELECT MIN(HH_POINTAGE)
                                                               FROM POINTAGES
                                                               WHERE MATRICULE = '0118'
                                                                 AND DT_POINTAGE = '30/10/2019'));
我得到以下结果:


我的问题是,是否有任何方法可以对
HH_POINTAGE
列执行以下操作:
(32820-32400)+(42000-41400)+(50400-43200)
Hmmm。基于nemra的偶数/奇数,您似乎想要这样做:

with t as (
      <your query here>
     )
select sum(case when nemra % 2 = 1 then hh_pointage
                else - hh_pointage
           end)
from t;
带t作为(
)
选择总和(nemra%2=1时的情况,然后选择hh_pointage
else-hh_pointage
(完)
从t;

是。有一种方法,但您必须添加另一个查询。这里的逻辑是什么?为什么有些数字是加的,有些是减的?这些值以秒为单位表示时间,GMT是时间,它是员工在一天中的进进出出,我想知道他在一天中的存在,所以是09:07-09:00,这是7分钟+(11:40-11:30,这是10分钟)等等。。。。。