Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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

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 基于两个唯一标识符的工时总和_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 基于两个唯一标识符的工时总和

Sql 基于两个唯一标识符的工时总和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想总结一下公司员工在给定的两周内(工资期)的总工作时间。我有一个视图,它拉取一列唯一的员工标识符[CODE_USER],一列唯一标识的工资类型(常规、加班、假日、假期等)[CODE],一列总工作时间[hours],以及一列工作周的每一天[day] 目前,[Hours]列显示了每名员工每天工作的总小时数(基于唯一的工资类型,如正常工作时间或加班时间) 我需要将每个员工[CODE_USER]在两周内的所有工作时间,以及每个工资类型[CODE]合并到一个名为“小时”的汇总列中 理想的最终结果如下所示

我想总结一下公司员工在给定的两周内(工资期)的总工作时间。我有一个视图,它拉取一列唯一的员工标识符[CODE_USER],一列唯一标识的工资类型(常规、加班、假日、假期等)[CODE],一列总工作时间[hours],以及一列工作周的每一天[day]

目前,[Hours]列显示了每名员工每天工作的总小时数(基于唯一的工资类型,如正常工作时间或加班时间)

我需要将每个员工[CODE_USER]在两周内的所有工作时间,以及每个工资类型[CODE]合并到一个名为“小时”的汇总列中

理想的最终结果如下所示,假设员工ID在两周内工作80个正常小时,20个加班小时(E1等于正常时间,E2等于加班时间):

我认为最接近于解决这个问题的是下面的代码,但是它并不是唯一的code_用户在两周内的工作时间总和,它将两周内每天的工作时间列为该员工的行集合。例如,以下代码显示了员工ID 125的18行,该员工在E1(常规)标记的时间段内工作了整整10天8.00小时,并且有8次员工加班时间标记为E2(加班)

代码:

预期成果:


我希望看到表中每个唯一员工ID[CODE_USER]的输入工资期(2周)的E1、E2等总和。最终结果应该是每个员工的两行,固定时间(E1)和加班时间(E2)是该员工在给定时间段内为每个类别工作的时间总和。

不仅仅是您应该从分组中删除日期,从where子句中删除特定员工吗

SELECT [CODE_USER], 
   [Code],
   SUM(Hours) AS Hours
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
GROUP BY [CODE_USER], [Code]
ORDER BY [CODE_USER]
选择[code\u USER],
[代码],
总计(小时)为小时
从[LookUp].[dbo].[Daily_Hours_Worked]
其中【日期】>='20191007'和【日期】<'20191019'
分组依据[代码\用户],[代码]
由[代码\用户]订购
你不需要按小时分组;你在求和。在这种情况下,您应该按一列进行分组,而您也在聚合该列,这种情况很少见


我不明白为什么你说两个星期,但你的where条款中的日期不是相隔两周;如果有人在周末工作呢?我离开了这一部分,只是想提出它,因为它看起来很奇怪,你会做12天,即只包括每隔一个周末(如果作业每两周运行一次)

难道你不应该简单地从分组中删除这一天,从where子句中删除特定的员工吗

SELECT [CODE_USER], 
   [Code],
   SUM(Hours) AS Hours
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
GROUP BY [CODE_USER], [Code]
ORDER BY [CODE_USER]
选择[code\u USER],
[代码],
总计(小时)为小时
从[LookUp].[dbo].[Daily_Hours_Worked]
其中【日期】>='20191007'和【日期】<'20191019'
分组依据[代码\用户],[代码]
由[代码\用户]订购
你不需要按小时分组;你在求和。在这种情况下,您应该按一列进行分组,而您也在聚合该列,这种情况很少见


我不明白为什么你说两个星期,但你的where条款中的日期不是相隔两周;如果有人在周末工作呢?我离开了这一部分,只是想提出它,因为它似乎很奇怪,你会做12天,即只包括每隔一个周末(如果作业每两周运行一次)

谢谢你的指点,他们肯定帮助找到了解决方案。您的代码中提供的更改不包括我必须在[Day]之前删除订单,因为我已经从SELECT语句中的列中删除了订单。感谢您提供的提示,它们确实帮助找到了解决方案。您的代码中提供的更改没有考虑到我必须在[Day]之前删除订单这一事实,因为我已经从SELECT语句的列中删除了订单。
CODE_USER   Code    Hours   Day
  125       E1       8.00   2019-10-18 00:00:00.000
  125       E2       0.70   2019-10-18 00:00:00.000
  125       E1       8.00   2019-10-17 00:00:00.000
  125       E2       1.65   2019-10-17 00:00:00.000
  125       E1       8.00   2019-10-16 00:00:00.000
  125       E2       1.15   2019-10-16 00:00:00.000
  125       E1       8.00   2019-10-15 00:00:00.000
  125       E2       0.97   2019-10-15 00:00:00.000
  125       E1       8.00   2019-10-14 00:00:00.000
  125       E2       1.99   2019-10-14 00:00:00.000
  125       E1       8.00   2019-10-11 00:00:00.000
  125       E2       0.12   2019-10-11 00:00:00.000
  125       E1       8.00   2019-10-10 00:00:00.000
  125       E2       0.05   2019-10-10 00:00:00.000
  125       E1       8.00   2019-10-09 00:00:00.000
  125       E2       0.10   2019-10-09 00:00:00.000
  125       E1       7.99   2019-10-08 00:00:00.000
  125       E1       7.99   2019-10-07 00:00:00.000
SELECT [CODE_USER], 
   [Code],
   SUM(Hours) AS Hours
FROM [LookUp].[dbo].[Daily_Hours_Worked]
WHERE [Day] >= '20191007' AND [Day] < '20191019'
GROUP BY [CODE_USER], [Code]
ORDER BY [CODE_USER]