这个问题可能看起来简单而且重复,因为我是SQL的初学者,所以我一直坚持这个问题。
我创建了一个表变量来存储24小时格式的小时范围。这是代码
DECLARE @TIMERANGE TABLE ([TIME] NVARCHAR(MAX))
;with hrs (time)
AS
(
SELECT 0
UNION ALL
SELECT time+1
FROM hrs WHERE time<23
)
INSERT INTO @TIMERANGE select
RIGHT ('0000' + CONVERT(VARCHAR, time), 4) + '-' + RIGHT('0000' + CONVERT(VARCHAR, time + 1), 4) AS [TIME]
from hrs
此表的输出是:
TIME
0000-0001
0001-0002
0002-0003
0003-0004
0004-0005
0005-0006
0006-0007
0007-0008
0008-0009
0009-0010
0010-0011
0011-0012
0012-0013
0013-0014
0014-0015
0015-0016
0016-0017
0017-0018
0018-0019
0019-0020
0020-0021
0021-0022
0022-0023
0023-0024
条件是,我想加入具有特定条件的真实表格
Id Date Time Score
1 2008-01-01 00:05 15
2 2008-01-01 00:15 20
3 2008-01-02 10:15 05
4 2008-01-02 11.00 55
我想找到特定时间范围内的得分总和,例如,00.15将落在时间范围0000-0001。
所需的输出是:
Time Range Score
0000-0001 25
........ ..
........ ..
请帮助
答案 0 :(得分:0)
我希望我理解这些要求。我明白你为什么要做CTE了。我已经这样做了,以支持图表,以便表示当天的每个小时,无论是否有结果数据。
我重新考虑了查询以产生以下内容:
declare @tmp TABLE (MyDate DATE, MyTime TIME,Score INT)
INSERT INTO @tmp VALUES('2008-01-01','00:05',15),
('2008-01-01','00:15',20),
('2008-01-02','10:15',05),
('2008-01-02','11:00',55)
SELECT SUM(Score) Score,datepart(hour,GETDATE()) TimeRange FROM @tmp Group By datepart(hour,MyTime)
结果将按小时显示SUM(或平均值或任何您需要的值)。如果你仍然需要绘制结果图表,那么在当时的小时组件上加入你的CTE。
希望这有帮助。