如何为范围内给定的每一天创建一个新的临时表?

问题描述 投票:0回答:2

我需要根据示例中给出的天数创建一个临时表,

我需要

2015-06-08
2015-06-29
的临时表,我将创建 22 个临时表,每个表根据日期都有自己的数据。

我的查询将循环选择数据到这些临时表中,唯一需要更改的是日期。

sql sql-server temp-tables
2个回答
0
投票

这里的每个人都建议您不需要每个日期都有一个表,而是每个日期在表中需要一行,而且您不一定需要将结果存储到临时表中。

您可以编写一个生成此日期范围的查询,并将现有查询与日期范围查询的结果连接起来。

存储查询结果有利于人们直观地看到数据,但是sql server不需要临时表中的数据来进行数据处理,如果您知道一个查询会产生特定的结果集,您可以将另一个表与该结果集连接起来,您在运行时看不到结果集,但 sql server 在运行时获取该结果集并将其与您的表连接。

现在希望如果我已经让您相信您不需要每个日期都有一个临时表,那么我们来谈谈解决方案。

您所需要的只是一个查询,该查询会生成日期范围为

2015-06-08
2015-06-29
的结果集,为此您可以执行以下操作:

DECLARE @From DATE = '2015-06-08' 
DECLARE @To   DATE = '2015-06-29'

SELECT Dates 
FROM 
  (
    SELECT TOP  (DATEDIFF(DAY,@From , @To))
      DATEADD(DAY , 
                  ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
                ,@To) AS Dates
   FROM master..spt_values
  )Dates_Table

上面的查询将产生一个带有日期的结果集,现在您可以将另一个表与该结果集连接起来以获得您需要的最终结果。


0
投票

非常好,但是您应该在 DATEADD 函数中将

@To
更改为
@From
以从第一个日期开始


DECLARE @From DATE = '2015-06-08' 
DECLARE @To   DATE = '2015-06-29'

SELECT Dates 
FROM 
  (
    SELECT TOP  (DATEDIFF(DAY,@From , @To))
      DATEADD(DAY , 
                  ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
                ,@From) AS Dates
   FROM master..spt_values
  )Dates_Table
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.