sql查询以找出每个部门的插槽总数
我有一个表tempslotsassignedfordept,如下所示sql查询以找出每个部门的插槽总数,sql,sql-server-2008,Sql,Sql Server 2008,我有一个表tempslotsassignedfordept,如下所示 DEPT ScheduledStartDate ScheduledEndDate TotalSlots DevEng 2012-07-17 00:00:00.000 2012-08-28 00:00:00.000 39 DevEng 2012-07-17 00:00:00.000 2012-08-31 00:00:00.000
DEPT ScheduledStartDate ScheduledEndDate TotalSlots
DevEng 2012-07-17 00:00:00.000 2012-08-28 00:00:00.000 39
DevEng 2012-07-17 00:00:00.000 2012-08-31 00:00:00.000 18
DevEng 2012-07-18 00:00:00.000 2012-08-29 00:00:00.000 9
DevEng 2012-07-19 00:00:00.000 2012-08-30 00:00:00.000 40
Prod 2012-07-19 00:00:00.000 2012-08-30 00:00:00.000 8
Rel 2012-07-19 00:00:00.000 2012-08-30 00:00:00.000 19
Rel 2012-07-19 00:00:00.000 2013-08-15 00:00:00.000 1
我必须捕获每个部门总时段的上述总和。如果某个部门存在连续3天。如果您看到上表,有一个department deveng的三个预定开始日期为2012-07-172012-07-182012-07-19。 我正在尝试使用下面的查询查看结果,请您帮助更多的实现查看确切的结果是什么
SELECT Tmain.DepartmentCode,
CONVERT(VARCHAR(20), Tmain.ScheduledStartDate, 101) 'ScheduledStartDate',
SUM(Tmain.TotalSlots) 'Tmain.TotalSlots',T1Sub.TotalSlots 'T1SubTotalSlots', T2Sub.TotalSlots 'T2SubTotalSlots'
FROM tempSlotsAssignedForDept Tmain
INNER JOIN (Select DATEADD(DAY,1,T1.ScheduledStartDate) 'ScheduledStartDate',SUM(T1.TotalSlots) 'TotalSlots'
FROM tempSlotsAssignedForDept T1
INNER JOIN tempSlotsAssignedForDept Tmain
ON (T1.ScheduledStartDate = dateadd(day, -1, tmain.ScheduledStartDate ) and
T1.DepartmentCode = tmain.DepartmentCode)
GROUP BY T1.ScheduledStartDate ) T1Sub
ON Tmain.ScheduledStartDate = T1Sub.ScheduledStartDate
INNER JOIN (Select DATEADD(DAY,2,T2.ScheduledStartDate) 'ScheduledStartDate',SUM(T2.TotalSlots) 'TotalSlots'
FROM tempSlotsAssignedForDept T2
INNER JOIN tempSlotsAssignedForDept Tmain
ON (T2.ScheduledStartDate = dateadd(day, -2, tmain.ScheduledStartDate ) and
T2.DepartmentCode = tmain.DepartmentCode)
GROUP BY T2.ScheduledStartDate ) T2Sub
ON Tmain.ScheduledStartDate = T2Sub.ScheduledStartDate
GROUP BY Tmain.DepartmentCode,Tmain.ScheduledStartDate,T1Sub.TotalSlots , T2Sub.TotalSlots
ORDER BY Tmain.ScheduledStartDate
上述查询的结果是
DepartmentCode ScheduledStartDate Tmain.TotalSlots T1SubTotalSlots T2SubTotalSlots
DevEng 07/19/2012 40 9 57
Prod 07/19/2012 8 9 57
Rel 07/19/2012 20 9 57
最终结果应如下所示。因为,prod和rel部门没有3天的scheduledstartdate系列
DepartmentCode ScheduledStartDate Tmain.TotalSlots T1SubTotalSlots T2SubTotalSlots
DevEng 07/19/2012 40 9 57
请帮助。以下是您正在寻找的答案:
Select * from
(
Select DepartmentCode,ScheduledStartDate,[Tmain.TotalSlots]
,(Select SUM(T1.TotalSlots) from tempSlotsAssignedForDept T1 where t1.departmentCode=a.DepartmentCode
and T1.ScheduledStartDate = dateadd(day, -1, a.ScheduledStartDate )) T1SubTotalSlots
,(Select SUM(T1.TotalSlots) from tempSlotsAssignedForDept T1 where t1.departmentCode=a.DepartmentCode
and T1.ScheduledStartDate = dateadd(day, -2, a.ScheduledStartDate )) T2SubTotalSlots
from
(
SELECT Tmain.DepartmentCode,
CONVERT(VARCHAR(20), Tmain.ScheduledStartDate, 101) ScheduledStartDate,
SUM(Tmain.TotalSlots) 'Tmain.TotalSlots'
--,(Select SUM(T1.TotalSlots) from tempSlotsAssignedForDept t1 where t1.DepartmentCode=tmain.departmentcode
--and T1.ScheduledStartDate = dateadd(day, -1, tmain.ScheduledStartDate ))
FROM tempSlotsAssignedForDept Tmain
GROUP BY Tmain.DepartmentCode,Tmain.ScheduledStartDate
) a) b where [Tmain.TotalSlots] is not null and T1SubTotalSlots is not null and T2SubTotalSlots is not null
恐怕你这样描述它真的没有道理。您试图对Tmain.TotalSlots求和,但在最终结果中,您显示了Tmain.TotalSlots,即40小时?你不想让它持续80小时吗?请clarify@jeschafe,是的,Tmain.TotalSlots应该是40,因为DepartDev只有3个连续日。你说“串行”是什么意思?串行的意思,请在tempslotsassignedfordept表中找到,deveng部门有三个连续的计划开工日期,即2012-07-172012-07-182012-07-19。如果连续三天以上,您希望发生什么?只算最后三个?都是吗?每三天数一次(剩菜怎么办)?只有在三天确实存在的情况下?不要放弃!直接回答,我喜欢。非常感谢。