Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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/1/ms-access/4.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
MS Access查询,如何使用SQL将单个日期分组为周_Sql_Ms Access_Ms Access 2016 - Fatal编程技术网

MS Access查询,如何使用SQL将单个日期分组为周

MS Access查询,如何使用SQL将单个日期分组为周,sql,ms-access,ms-access-2016,Sql,Ms Access,Ms Access 2016,我现在有两张桌子。其中一个有员工姓名和一个与该姓名关联的号码 另一个日期具有时间表日期,其中包含员工编号、日期和该日期的工作小时数列 我想创建一个交叉表查询,在一列中显示员工姓名,在每列中显示一周结束的日期,然后显示特定员工该周的小时数总和 我当前的查询有效,但只能按月分组。我很难想出如何把一天分成几周 TRANSFORM Sum(tblTimeSheetData.WorkHours) AS SumOfHours SELECT tblEmployees.Combined FROM tblTime

我现在有两张桌子。其中一个有员工姓名和一个与该姓名关联的号码

另一个日期具有时间表日期,其中包含员工编号、日期和该日期的工作小时数列

我想创建一个交叉表查询,在一列中显示员工姓名,在每列中显示一周结束的日期,然后显示特定员工该周的小时数总和

我当前的查询有效,但只能按月分组。我很难想出如何把一天分成几周

TRANSFORM Sum(tblTimeSheetData.WorkHours) AS SumOfHours
SELECT tblEmployees.Combined
FROM tblTimeSheetData RIGHT JOIN tblEmployees ON tblTimeSheetData.EmployeeID = 
tblEmployees.EmployeeID
GROUP BY tblEmployees.Combined
ORDER BY tblEmployees.Combined, Format([WorkDate],"yyyy-mm")
PIVOT Format([WorkDate],"yyyy-mm");

您可以尝试使用datepart函数获取一周,如

SELECT DATEPART(ww, 'your date') AS week;
然后每周分组

这里有更多信息

您可以尝试使用datepart函数获取一周,如

SELECT DATEPART(ww, 'your date') AS week;
然后每周分组

这里有更多信息
由于第一周和最后一周的数字跨越日历年,因此必须包括年份和周数:

选项比较数据库
选项显式
Public Const MaxWeekValue为整数=53
Public Const MinWeekValue为整数=1
Public Const MaxMonthValue为整数=12
Public Const MinMonthValue为整数=1
'对于日期值,返回带
'年和周数符合ISO-8601。
'可选地,W用作年和周部分之间的分隔符。
'
“典型用法:
'
'FormatWeekIso8601(日期)
'   ->  2017-23
'
'FormatWeekIso8601(日期,真)
'->2017W23
'
' 2017-04-28. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公共功能表单WEEKISO8601(_
ByVal表达式作为变体_
可选的ByVal WeekSeparator(作为布尔值)_
作为字符串
常量ISO8601分隔符为String=“W”
Const NeutralSeparator As String=“-”
将结果变暗为字符串
作为整数的年份
将等周设置为整数
如果是IsDate(表达式),则
IsoWeek=周(日期值(表达式),IsoYear)
结果=_
VBA.Format(IsoYear,字符串(3,“0”))和_
IIf(周分离器、ISO8601分离器、中性分离器)和_
VBA.Format(IsoWeek,字符串(2,“0”))
如果结束
FormatWeekIso8601=结果
端函数
'返回日期的ISO 8601周。
'相关ISO年由ref返回。
'
' 2016-01-06. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公众活动周(_
ByVal Date1作为日期_
可选ByRef(作为整数的年份)_
作为整数
将月份设置为整数
作为字符串的暗间隔
将结果设置为整数
Interval=“ww”
月=VBA.Month(日期1)
'最初,将ISO年设置为日历年。
IsoYear=VBA.年(日期1)
结果=日期部分(间隔、日期1、vbMonday、vbFirstFourDays)
如果结果=MaxWeekValue,则
如果DatePart(Interval,DateAdd(Interval,1,Date1),vbMonday,vbFirstFourDays)=MinWeekValue,则
”“好的。下周是次年的第一周。
其他的
“这确实是下一个ISO年的第一周。
'对于DatePart错误是正确的。
结果=MinWeekValue
如果结束
如果结束
'调整周数属于下一年或上一年的年份。
如果月份=MinMonthValue,则
如果结果>=MaxWeekValue-1,则
“这是1月初的一天,属于上一个ISO年的最后一周。
等年=等年-1
如果结束
ElseIf Month=最大月值
如果结果=MinWeekValue,则
“这是12月底的日期,属于下一个ISO年的第一周。
等年=等年+1
如果结束
如果结束
'IsoYear通过引用返回。
周=结果
端函数
如果只希望以最后一周日期为轴心,可以使用以下表达式:

DateAdd(“d”,7-工作日([WorkDate],vbMonday),[WorkDate])

这假设ISO周编号,其中周一是一周的第一天。

由于第一周和最后一周的编号跨越日历年,因此必须包括年和周编号:

选项比较数据库
选项显式
Public Const MaxWeekValue为整数=53
Public Const MinWeekValue为整数=1
Public Const MaxMonthValue为整数=12
Public Const MinMonthValue为整数=1
'对于日期值,返回带
'年和周数符合ISO-8601。
'可选地,W用作年和周部分之间的分隔符。
'
“典型用法:
'
'FormatWeekIso8601(日期)
'   ->  2017-23
'
'FormatWeekIso8601(日期,真)
'->2017W23
'
' 2017-04-28. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公共功能表单WEEKISO8601(_
ByVal表达式作为变体_
可选的ByVal WeekSeparator(作为布尔值)_
作为字符串
常量ISO8601分隔符为String=“W”
Const NeutralSeparator As String=“-”
将结果变暗为字符串
作为整数的年份
将等周设置为整数
如果是IsDate(表达式),则
IsoWeek=周(日期值(表达式),IsoYear)
结果=_
VBA.Format(IsoYear,字符串(3,“0”))和_
IIf(周分离器、ISO8601分离器、中性分离器)和_
VBA.Format(IsoWeek,字符串(2,“0”))
如果结束
FormatWeekIso8601=结果
端函数
'返回日期的ISO 8601周。
'相关ISO年由ref返回。
'
' 2016-01-06. 古斯塔夫·布罗克,仙人掌数据ApS,CPH。
'
公众活动周(_
ByVal Date1作为日期_
可选ByRef(作为整数的年份)_
作为整数
将月份设置为整数
作为字符串的暗间隔
将结果设置为整数
Interval=“ww”
月=VBA.Month(日期1)
'最初,将ISO年设置为日历年。
IsoYear=VBA.年(日期1)
结果=日期部分(间隔、日期1、vbMonday、vbFirstFourDays)
如果结果=MaxWeekValue,则
如果是DatePart(间隔,DateAdd(间隔,1,日期