2016-08-02 191 views
0

該表如下。如何獲得平均值YTD

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
25 20 45 10 15 23 23 17 19 21 24 33 

我想顯示到上個月的平均值。意思是,如果這是八月,我想展示到七月。如果當前月份是9月份,我想要到7月份。該表格應如下所示。

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Avg 
25 20 45 10 15 23 23 17 19 21 24 33 23 
+0

你只有表現出我們一月的數據通過十二月在上表中。如果我想在八月到七月之間展示什麼?你的表是派生表嗎? –

+0

更改你的餐桌設計......該佈局是非標準化餐桌的紅旗#1。爲年/月添加一列,爲該值添加另一列。 – jleach

回答

2

您的數據格式是非常差的。您可以更好地使用列中的數據。但是,你可以做一個痛苦的查詢是這樣的:

select ((case when month(getdate()) > 1 then jan else 0 end) + 
     (case when month(getdate()) > 2 then feb else 0 end) + 
     . . . 
     (case when month(getdate()) > 11 then nov else 0 end) 
     )/
     ((case when month(getdate()) > 1 then 1 else 0 end) + 
     (case when month(getdate()) > 2 then 1 else 0 end) + 
     . . . 
     (case when month(getdate()) > 11 then 1 else 0 end) 
     ) 
+0

感謝您的回覆。請幫助我以下。我已經在sql中編寫了數據透視表的代碼。在這裏,我必須添加一個YTD列,它應該顯示上個月的數據總和。 – Manish

+1

將您的代碼發佈爲其他問題。 –

1

你想這樣的事情?:

SELECT * INTO tbl_Month_AVG 
FROM (VALUES 
(25,1),(20,2),(45,3),(10,4),(15,5),(23,6),(23,7),(17,8),(19,9),(21,10),(24,11),(33,12)) as a(Num,Mon) 

;WITH Avg_On as (
SELECT Mon, SUM(Num) OVER(ORDER BY Mon) 
    /COUNT(*) OVER(ORDER BY (SELECT NULL)) as Avg_On 
FROM tbl_Month_AVG 
WHERE Mon < 8 
) 
SELECT Avg_On FROM Avg_On 
WHERE Mon = (Select MAX(Mon) FROM Avg_On) 
+0

感謝您的回覆。請幫助我以下。我已經在sql中編寫了數據透視表的代碼。在這裏,我必須添加一個YTD列,它應該顯示上個月的數據總和。 – Manish