0

以下のように Table tempslotsassignedforeptがあります

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 日が存在します。
上の表を見ると、部門 deveng には 2012 年 7 月 17 日、2012 年 7 月 18 日、2012 年 7 月 19 日の連続した 3 つの開始予定日があります。

以下のクエリを使用して結果を確認しようとしていますが、正確な結果を確認するためのより多くの実装を教えてください。

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 日間の一連の schedulestartdate がないからです

DepartmentCode  ScheduledStartDate  Tmain.TotalSlots    T1SubTotalSlots T2SubTotalSlots
DevEng          07/19/2012          40                  9               57  

助けてください。

4

1 に答える 1

1

これがあなたが探している答えです:

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
于 2012-08-30T15:42:59.513 に答える