2011-04-11 116 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(如利芬的答案)

我要說的是概念上的遞歸查詢是最難理解和維護,請閱讀大量示例。