我可以对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分钟)等等。。。。。