2011-04-11 111 views
2

我需要在SQL中运行简单的选择查询。多次选择查询,更改日期

问题是我需要12个输出基础不同的月份。有没有办法像宏一样执行一些事情,我只需编写一次查询,并且只需更改monthend日期就可以自行运行12次?

感谢

回答

3

你可以使用下面的构造得到12条每个月和交叉运用与原来的查询结果。

;WITH q AS (
    SELECT Column1 = GetDate() 
    UNION ALL 
    SELECT DATEADD(mm, 1, q.Column1) 
    FROM q 
    WHERE q.Column1 < DATEADD(mm, 11, GetDate()) 
) 
SELECT * 
FROM q 
+0

好宏。 :)当然,对于SQL Server 2005+ – 2011-04-11 13:27:49

+0

@Andriy而言,这是真的。 OP没有提及她正在使用的版本。我认为它至少是2005年。如果不是,那么with结构关闭。 – 2011-04-11 13:46:31

2

尝试解决关系代数的概念。

翻译算法的方法,如循环,只能工作到目前为止。关系代数传统上有其局限性(所以你会在所有RDBMS中找到程序支持),但是与CTE和递归查询一起,你几乎没有办法做。

你的问题可以通过

  • 程序SQL来解决(其中有循环,见example
  • 加盟与这将对这12个实例的条目(如表可以临时使用创建另一个表或可以使系统的一部分)
  • 递归SQL(如利芬的答案)

我要说的是概念上的递归查询是最难理解和维护,请阅读大量示例。