您可以在以下使用UNPIVOT
:
QUERY
;with cte as
(
select DATEPART(hh,Start_time) StartTime
, DATEPART(hh,End_time) EndTime
, CASE WHEN 7 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [7]
, CASE WHEN 8 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [8]
, CASE WHEN 9 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [9]
, CASE WHEN 10 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [10]
, CASE WHEN 11 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [11]
, CASE WHEN 12 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [12]
, CASE WHEN 13 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [13]
, CASE WHEN 14 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [14]
, CASE WHEN 15 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [15]
, CASE WHEN 16 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [16]
, CASE WHEN 17 BETWEEN DATEPART(hh,Start_time) AND DATEPART(hh,End_time) THEN 1 ELSE 0 END AS [17]
from #test
)
select StartTime1 StartTime, sum(Cnt) Counter
from(
select StartTime,[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17]
from cte
) p
UNPIVOT
(
Cnt FOR StartTime1 IN ([7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17])
)AS unpvt
group by StartTime1
order by CAST(StartTIme1 AS INT)
樣本數據
create table #test
(
VisitUID INT,
AttendeeID INT,
Start_time DATETIME,
End_time DATETIME,
)
insert into #test values
(0, 123,'01/01/2015 09:15','01/01/2015 17:15'),
(1, 456,'01/01/2015 10:45','01/01/2015 16:30'),
(2, 753,'01/01/2015 08:05','01/01/2015 17:45'),
(3, 975,'01/01/2015 07:15','01/01/2015 15:05'),
(4, 864,'01/01/2015 15:55','01/01/2015 16:25'),
(5, 246,'01/01/2015 16:00','01/01/2015 17:35'),
(6, 357,'01/01/2015 11:10','01/01/2015 14:55')
輸出
StartTime Counter
7 1
8 2
9 3
10 4
11 5
12 5
13 5
14 5
15 5
16 5
17 3
你介意添加你到目前爲止嘗試過的查詢嗎? – Wanderer
SUM()a CASE表達式,如果該人員在相關小時內返回1,則返回1;如果不是,則爲0。 –
預期結果的第一列是什麼?如果那是一天中的小時,它與樣本數據不匹配。如果你需要跨越幾天,你還需要一個日期。 –