使用Table-SQL连接Table变量

时间:2014-08-04 03:54:55

标签: sql sql-server sql-server-2008

这个问题可能看起来简单而且重复,因为我是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
........     ..
........     ..

请帮助

1 个答案:

答案 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。

希望这有帮助。