我们正在尝试分析我们的员工每小时工作多长时间以进行趋势和预测。
我们有员工的时钟(SHIFTA_Start)和时钟输出(SHIFTA_End)。
下面是我正在使用的当前代码,我在执行后包含了SQL中显示的输出。
但是,当员工在一夜之间工作时,例如:SHIFTASTART!= SHIFTAEND,无法填充字段。当前SQL仅在员工在同一天开始和结束班次时起作用。
有没有人知道如何修改查询,以便当员工在一夜之间工作时,它可以填充在SQL列中?
SELECT
--b.*,
b.EMPLOYEENAME,
B.DEPARTMENT,
CONVERT(datetime, LEFT(b.SHIFTA_start,17),103) AS SHIFTA_start,
CONVERT(datetime, LEFT(b.ShiftA_End,17),103) as ShiftA_End,
b.StartTime_HOUR,
b.StartTime_min,
b.EndTime_HOUR,
b.EndTime_min,
CASE WHEN b.[0H_START] < b.[0H_END] THEN b.[0H_START] ELSE b.[0H_END] END AS [0],
CASE WHEN b.[1H_START] < b.[1H_END] THEN b.[1H_START] ELSE b.[1H_END] END AS [1],
CASE WHEN b.[2H_START] < b.[2H_END] THEN b.[2H_START] ELSE b.[2H_END] END AS [2],
CASE WHEN b.[3H_START] < b.[3H_END] THEN b.[3H_START] ELSE b.[3H_END] END AS [3],
CASE WHEN b.[4H_START] < b.[4H_END] THEN b.[4H_START] ELSE b.[4H_END] END AS [4],
CASE WHEN b.[5H_START] < b.[5H_END] THEN b.[5H_START] ELSE b.[5H_END] END AS [5],
CASE WHEN b.[6H_START] < b.[6H_END] THEN b.[6H_START] ELSE b.[6H_END] END AS [6],
CASE WHEN b.[7H_START] < b.[7H_END] THEN b.[7H_START] ELSE b.[7H_END] END AS [7],
CASE WHEN b.[8H_START] < b.[8H_END] THEN b.[8H_START] ELSE b.[8H_END] END AS [8],
CASE WHEN b.[9H_START] < b.[9H_END] THEN b.[9H_START] ELSE b.[9H_END] END AS [9],
CASE WHEN b.[10H_START] < b.[10H_END] THEN b.[10H_START] ELSE b.[10H_END] END AS [10],
CASE WHEN b.[11H_START] < b.[11H_END] THEN b.[11H_START] ELSE b.[11H_END] END AS [11],
CASE WHEN b.[12H_START] < b.[12H_END] THEN b.[12H_START] ELSE b.[12H_END] END AS [12],
CASE WHEN b.[13H_START] < b.[13H_END] THEN b.[13H_START] ELSE b.[13H_END] END AS [13],
CASE WHEN b.[14H_START] < b.[14H_END] THEN b.[14H_START] ELSE b.[14H_END] END AS [14],
CASE WHEN b.[15H_START] < b.[15H_END] THEN b.[15H_START] ELSE b.[15H_END] END AS [15],
CASE WHEN b.[16H_START] < b.[16H_END] THEN b.[16H_START] ELSE b.[16H_END] END AS [16],
CASE WHEN b.[17H_START] < b.[17H_END] THEN b.[17H_START] ELSE b.[17H_END] END AS [17],
CASE WHEN b.[18H_START] < b.[18H_END] THEN b.[18H_START] ELSE b.[18H_END] END AS [18],
CASE WHEN b.[19H_START] < b.[19H_END] THEN b.[19H_START] ELSE b.[19H_END] END AS [19],
CASE WHEN b.[20H_START] < b.[20H_END] THEN b.[20H_START] ELSE b.[20H_END] END AS [20],
CASE WHEN b.[21H_START] < b.[21H_END] THEN b.[21H_START] ELSE b.[21H_END] END AS [21],
CASE WHEN b.[22H_START] < b.[22H_END] THEN b.[22H_START] ELSE b.[22H_END] END AS [22],
CASE WHEN b.[23H_START] < b.[23H_END] THEN b.[23H_START] ELSE b.[23H_END] END AS [23]
from
(
/*Step 2 - calculating minutes from starttime and endtime */
select a.*,
/**Calculating the number of minutes worked from start_time MIN **/
CASE WHEN a.StartTime_HOUR = 0 and a.[0] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[0] END AS [0H_START],
CASE WHEN a.StartTime_HOUR = 1 and a.[1] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[1] END AS [1H_START],
CASE WHEN a.StartTime_HOUR = 2 and a.[2] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[2] END AS [2H_START],
CASE WHEN a.StartTime_HOUR = 3 and a.[3] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[3] END AS [3H_START],
CASE WHEN a.StartTime_HOUR = 4 and a.[4] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[4] END AS [4H_START],
CASE WHEN a.StartTime_HOUR = 5 and a.[5] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[5] END AS [5H_START],
CASE WHEN a.StartTime_HOUR = 6 and a.[6] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[6] END AS [6H_START],
CASE WHEN a.StartTime_HOUR = 7 and a.[7] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[7] END AS [7H_START],
CASE WHEN a.StartTime_HOUR = 8 and a.[8] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[8] END AS [8H_START],
CASE WHEN a.StartTime_HOUR = 9 and a.[9] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[9] END AS [9H_START],
CASE WHEN a.StartTime_HOUR = 10 and a.[10] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[10] END AS [10H_START],
CASE WHEN a.StartTime_HOUR = 11 and a.[11] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[11] END AS [11H_START],
CASE WHEN a.StartTime_HOUR = 12 and a.[12] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[12] END AS [12H_START],
CASE WHEN a.StartTime_HOUR = 13 and a.[13] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[13] END AS [13H_START],
CASE WHEN a.StartTime_HOUR = 14 and a.[14] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[14] END AS [14H_START],
CASE WHEN a.StartTime_HOUR = 15 and a.[15] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[15] END AS [15H_START],
CASE WHEN a.StartTime_HOUR = 16 and a.[16] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[16] END AS [16H_START],
CASE WHEN a.StartTime_HOUR = 17 and a.[17] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[17] END AS [17H_START],
CASE WHEN a.StartTime_HOUR = 18 and a.[18] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[18] END AS [18H_START],
CASE WHEN a.StartTime_HOUR = 19 and a.[19] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[19] END AS [19H_START],
CASE WHEN a.StartTime_HOUR = 20 and a.[20] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[20] END AS [20H_START],
CASE WHEN a.StartTime_HOUR = 21 and a.[21] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[21] END AS [21H_START],
CASE WHEN a.StartTime_HOUR = 22 and a.[22] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[22] END AS [22H_START],
CASE WHEN a.StartTime_HOUR = 23 and a.[23] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[23] END AS [23H_START],
/**Calculating the number of minutes worked from END_time MIN **/
CASE WHEN a.EndTime_HOUR = 0 and a.[0] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[0] END AS [0H_END],
CASE WHEN a.EndTime_HOUR = 1 and a.[1] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[1] END AS [1H_END],
CASE WHEN a.EndTime_HOUR = 2 and a.[2] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[2] END AS [2H_END],
CASE WHEN a.EndTime_HOUR = 3 and a.[3] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[3] END AS [3H_END],
CASE WHEN a.EndTime_HOUR = 4 and a.[4] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[4] END AS [4H_END],
CASE WHEN a.EndTime_HOUR = 5 and a.[5] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[5] END AS [5H_END],
CASE WHEN a.EndTime_HOUR = 6 and a.[6] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[6] END AS [6H_END],
CASE WHEN a.EndTime_HOUR = 7 and a.[7] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[7] END AS [7H_END],
CASE WHEN a.EndTime_HOUR = 8 and a.[8] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[8] END AS [8H_END],
CASE WHEN a.EndTime_HOUR = 9 and a.[9] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[9] END AS [9H_END],
CASE WHEN a.EndTime_HOUR = 10 and a.[10] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[10] END AS [10H_END],
CASE WHEN a.EndTime_HOUR = 11 and a.[11] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[11] END AS [11H_END],
CASE WHEN a.EndTime_HOUR = 12 and a.[12] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[12] END AS [12H_END],
CASE WHEN a.EndTime_HOUR = 13 and a.[13] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[13] END AS [13H_END],
CASE WHEN a.EndTime_HOUR = 14 and a.[14] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[14] END AS [14H_END],
CASE WHEN a.EndTime_HOUR = 15 and a.[15] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[15] END AS [15H_END],
CASE WHEN a.EndTime_HOUR = 16 and a.[16] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[16] END AS [16H_END],
CASE WHEN a.EndTime_HOUR = 17 and a.[17] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[17] END AS [17H_END],
CASE WHEN a.EndTime_HOUR = 18 and a.[18] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[18] END AS [18H_END],
CASE WHEN a.EndTime_HOUR = 19 and a.[19] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[19] END AS [19H_END],
CASE WHEN a.EndTime_HOUR = 20 and a.[20] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[20] END AS [20H_END],
CASE WHEN a.EndTime_HOUR = 21 and a.[21] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[21] END AS [21H_END],
CASE WHEN a.EndTime_HOUR = 22 and a.[22] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[22] END AS [22H_END],
CASE WHEN a.EndTime_HOUR = 23 and a.[23] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[23] END AS [23H_END]
from
(--Step 1:
/*to determine 1 or 0 using the start and end hour
If time falls in the respective hour = 1
if time doesnt fall in the respective hours = 0*/
SELECT
--DISTINCT
[EMPLOYEENAME],
[DEPARTMENT],
[SHIFTA_start],
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN CONVERT(datetime, LEFT([SHIFTA_START],17),103) ELSE NULL END AS SHIFTA_START_con,
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) ELSE NULL END AS StartTime_HOUR,
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN DATEPART(mi,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) ELSE NULL END AS StartTime_min,
[SHIFTA_end],
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN CONVERT(datetime, LEFT([SHIFTA_END],17),103) ELSE NULL END AS SHIFTA_END_con,
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) ELSE NULL END AS EndTime_HOUR,
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN DATEPART(mi,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) ELSE NULL END AS EndTime_min,
CASE WHEN [SHIFTA_START] !='' AND 0 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [0],
CASE WHEN [SHIFTA_START] !='' AND 1 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [1],
CASE WHEN [SHIFTA_START] !='' AND 2 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [2],
CASE WHEN [SHIFTA_START] !='' AND 3 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [3],
CASE WHEN [SHIFTA_START] !='' AND 4 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [4],
CASE WHEN [SHIFTA_START] !='' AND 5 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [5],
CASE WHEN [SHIFTA_START] !='' AND 6 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [6],
CASE WHEN [SHIFTA_START] !='' AND 7 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [7],
CASE WHEN [SHIFTA_START] !='' AND 8 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [8],
CASE WHEN [SHIFTA_START] !='' AND 9 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [9],
CASE WHEN [SHIFTA_START] !='' AND 10 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [10],
CASE WHEN [SHIFTA_START] !='' AND 11 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [11],
CASE WHEN [SHIFTA_START] !='' AND 12 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [12],
CASE WHEN [SHIFTA_START] !='' AND 13 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [13],
CASE WHEN [SHIFTA_START] !='' AND 14 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [14],
CASE WHEN [SHIFTA_START] !='' AND 15 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [15],
CASE WHEN [SHIFTA_START] !='' AND 16 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [16],
CASE WHEN [SHIFTA_START] !='' AND 17 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [17],
CASE WHEN [SHIFTA_START] !='' AND 18 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [18],
CASE WHEN [SHIFTA_START] !='' AND 19 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [19],
CASE WHEN [SHIFTA_START] !='' AND 20 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [20],
CASE WHEN [SHIFTA_START] !='' AND 21 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [21],
CASE WHEN [SHIFTA_START] !='' AND 22 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [22],
CASE WHEN [SHIFTA_START] !='' AND 23 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [23]
from [TableName].[dbo].[TMS_PEOPLE]
where ShiftA_Start != '' and ShiftA_End !=''
and SHIFTA_start != '1900-01-01 00:00:00.000' and SHIFTA_end != '1900-01-01 00:00:00.000'
)a
)b