2012-04-17 64 views
1

想知道是否有人可以幫助解決這個問題。 我想要查詢數據並獲得2個條目,一個用於上年至今年,另一個用於今年至今。前幾年和今年的SQL YTD

唯一的方法,我知道如何做到這一點是作爲2個單獨的查詢與where子句..我寧願不必運行查詢兩次。

一列名爲DatePeriod,並填充2011年YTD和2012YTD,如果我能做到2011YTD,2012YTD,2011Total,2012Total ...會更好,儘管猜測這是4個查詢。

感謝

編輯: 針對幫助清除一些事情: 這是在MS SQL被編碼。

的數據看起來像這樣:(非常基本的例子)

Date  | Call_Volume 
1/1/2012 | 4 

我想什麼是有Call_Volume總結出來的,我有按月做查詢該組是按周,和其他人。我可以將所有樣片放入Excel中,並在Excel中執行此操作,但表格中有數百萬行,因此總是最好減小我的輸出大小。

我目前按周/月和年和聯盟分組,所以它的1輸出。但這意味着我有3個查詢訪問同一個表,很大的痛苦,非常慢並且沒有效率,這很好,但是現在我還需要一個YTD,所以它可以多一個查詢,或者如果我能找到一種方法將它添加到年度查詢中那會理想:

所以

DatePeriod | Sum_Calls 
2011 Total | 40 
2011 YTD  | 12 
2012 Total | 45 
2012 YTD  | 15 

希望這是任何意義。

+0

請將您的「2個單獨的查詢」以及@bluefeet提到的內容一起發佈 – Seph 2012-04-17 17:25:26

回答

1

SQL是建立在做,不操作(您選擇列,當然,但總的操作都在行)。

最標準的做法,這是一樣的東西:

SELECT SUM(your_table.sales), YEAR(your_table.sale_date) 
FROM your_table 
GROUP BY YEAR(your_table.sale_date) 

現在你會得到一個行每年的記錄,沒有限制,你可以多少年處理。如果你已經被另一個領域分組了,那很好;那麼您將在每個組中每年獲得一行。

然後,您的程序可以遍歷行並按照您的喜好組織/呈現它們。

如果你絕對,肯定必須有列,而不是,你會用東西卡這樣的:

SELECT SUM(IF(YEAR(date) = 2011, sales, 0)) AS total_2011, 
    SUM(IF(YEAR(date) = 2012, total_2012, 0)) AS total_2012 
FROM your_table 

如果你正在構建的查詢程序,你可以添加儘可能多的這些列的標準爲您需要,但我不會指望這個運行非常有效。 (這些例子是用一些特定於MySQL的函數編寫的,其他引擎也有相應的函數,但是語法稍有不同。)