2016-08-03 107 views
0

數據,每月有,直到12月合約。我想獲得一個新的專欄作爲「總和」,這將總結到上個月。意思是,現在是八月。所以,總和應該放在7月份的「總和」列中的第一項中。一月t二月三月t t四月t月t六月t七月t八月t九月t十月t十一月t十二月t總和

Jan| Feb| Mar| Apr| May| Jun |Jul |Aug |Sum  
21 | 28 | 26 | 31 | 54 | 67 |38 |29 |265    
11 | 44 | 66 | 7 | 88 | 54 |90 |74 |     
13 | 45 | 26 | 38 | 36 | 39 |67 |49 |    
76 | 35 | 67 | 23 | 76 | 54 |35 |59 |  
+0

你正在尋找一個動態查詢? –

+0

歡迎來到堆棧溢出:-) 到目前爲止你嘗試了什麼? – JimHawkins

+0

是的,需要動態查詢。查詢也應該可以在明年使用。它應該顯示明年1月份整個12個月的平均值。請建議 – Manish

回答

0
SELECT 
    Jan,Feb,Mar,Apr, and so on... 
    ,COALESCE(Jan,0) + COALESCE(Feb,0) + COALESCE(Mar,0) + COALESCE(Apr,0)..(till Dec) AS "Sum" 
FROM MyTable 

如果某行entrie爲NULL總和將是NULL,爲此是COALESCE-功能,這將變成一個NULL到ZERO

2

因爲月是閉集,我更喜歡這種簡單的解決方案:

SELECT *, 
    CASE WHEN DATEPART(MONTH, @date)<=1 THEN 0 ELSE Jan END + 
    CASE WHEN DATEPART(MONTH, @date)<=2 THEN 0 ELSE Feb END + 
    CASE WHEN DATEPART(MONTH, @date)<=3 THEN 0 ELSE Mar END + 
    CASE WHEN DATEPART(MONTH, @date)<=4 THEN 0 ELSE Apr END + 
    CASE WHEN DATEPART(MONTH, @date)<=5 THEN 0 ELSE May END + 
    CASE WHEN DATEPART(MONTH, @date)<=6 THEN 0 ELSE Jun END + 
    CASE WHEN DATEPART(MONTH, @date)<=7 THEN 0 ELSE Jul END + 
    CASE WHEN DATEPART(MONTH, @date)<=8 THEN 0 ELSE Aug END + 
    CASE WHEN DATEPART(MONTH, @date)<=9 THEN 0 ELSE Sep END Sum 
    --Append 3 more months to DECEMBER 
FROM Months 
+0

但查詢也應該爲明年工作。它應該顯示明年1月份整個12個月的平均值。請建議 – Manish

0
DECLARE @DATE date 
SET @date = GETDATE() 
SELECT LEFT(DATENAME(MM, @DATE), 3) 
相關問題