【问题标题】:Join Table variable with a Table - SQL将表变量与表连接 - SQL
【发布时间】:2014-08-04 03:54:54
【问题描述】:

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

请帮忙

【问题讨论】:

  • 我可能不完全理解你的问题,但你有什么理由不只是在DATEPART(HOUR, Time) 上用COUNT 打电话给GROUP BY
  • 有时会没有针对特定时间的记录,比如0002-0003时间范围内没有记录。在这种情况下,我想将它们显示为空。当我使用 DATEPART 时,我得到的只是时间的一部分,而不是时间范围,如果我的理解是真的
  • DATEPART() 函数用于返回日期/时间的单个部分,例如年、月、日、小时、分钟等。
  • 更改您的时间范围 TR 表,使其包含“开始时间”和“结束时间”。然后您可以通过T1.time between TR.start_time and TR.end_time 加入您的真实表 T1。 Time 和 Date 是 BTW 保留字,因此您可能希望将列的名称替换为更具体的名称。
  • 我需要在单列时间范围内输出 :( 我必须在这里使用 TIME 因为即使在某个时间范围内没有记录,也必须将它们显示为空

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


【解决方案1】:

我希望我了解这些要求。我明白你为什么要参加 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。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2012-03-30
    • 2015-06-20
    • 1970-01-01
    相关资源
    最近更新 更多