2017-10-13 45 views
0

我們的一位經理要求提供具有特定格式的報告,其中員工姓名爲行,一年中的月份爲列,每個員工平均每月收入填充單元格。日期最終將被替換爲@startdate和@enddate變量,但爲了構建和測試,我已經硬編碼了一個日曆年。爲了完成這個請求,我創建了一個PIVOT查詢,但是我的結果集是不正確的,而且我很少使用PIVOT查詢,所以我沒有足夠的知識來理解這個問題,並且我希望經常使用它們的人有一些幫助。在PIVOT中正確導出平均值

首先,這裏是我的查詢拉正確的結果集,而不要求的格式:

select d.Name, AVG(gross), s.systemmonth, s.SYSTEMYEAR 
from desk d, PAYMENTS s 
where d.code = s.DESK 
and s.ENTERED between '2017-08-01' and '2017-09-30' 
group by name, s.SYSTEMMONTH, s.SYSTEMYEAR 
order by name 

結果集的幾行:

Name (No column name) systemmonth SYSTEMYEAR 
employee 1 221.5737  8   2017 
employee 1 181.2476  9   2017 
employee 2 161.62   9   2017 
employee 2 321.9311  8   2017 
employee 3 249.2245  9   2017 
employee 4 328.1208  8   2017 
employee 4 198.6748  9   2017 
employee 5 76.4833   8   2017 
employee 5 96.6896   9   2017 

現在對於我的PIVOT查詢:

select name, [1] AS January, [2] AS February, [3] AS March, [4] AS April, 
[5] AS May, [6] AS June, [7] AS July, [8] AS August, [9] AS September, [10] 
AS October, [11] AS November, [12] AS December 
from 
(select d.Name, s.gross, s.systemmonth, s.SYSTEMYEAR 
from desk d, PAYMENTS s 
where d.code = s.DESK 
and s.ENTERED between '2017-01-01' and '2017-12-31' 
group by name AS Employee, s.gross, s.SYSTEMMONTH, s.SYSTEMYEAR) a 
PIVOT 
(AVG(gross) 
FOR systemmonth IN 
([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvt 
order by name 

伴隨的結果,平均值都是不正確的(但NULL是正確的)。我剛剛包括2個月,便於閱讀和比較:

Employee August September 
employee 1 279.501 245.478 
employee 2 544.9648 235.9713 
employee 3 NULL  312.5366 
employee 4 403.1505 273.9044 
employee 5 129.8883 239.8701 

有誰能告訴我爲什麼PIVOT的平均值計算不正確?感謝您的幫助。

+0

您是否有一個報告工具,您將使用(如果是這樣,它應該處理數據透視表)或者您只是計劃在數據庫中運行此查詢並將結果複製到Excel或某些內容(並且Excel可以做一個主要太)? – thomas

+0

嗨托馬斯。我們使用Visual Studio來構建我們的報告,因此基本上將查詢複製並粘貼到構建嚮導中。我真的不知道這樣的操作是否會進行,但它是一個好點,我會研究它。 – Greg

+0

然後你可能在Visual Studio中使用SSRS。查看Tablix功能(表格,列表,矩陣)。一個矩陣可以爲您提供原始數據(您甚至不會提供預先計算的平均值,只是原始的「總值」字段),然後讓您的報告工具爲您彙總所有內容。當你最終添加你的開始和結束參數時,還應該使它更容易和更動態。 – thomas

回答

1

嘗試從您的透視查詢中刪除此行。看起來你沒有理由分組。

group by name AS Employee, s.gross, s.SYSTEMMONTH, s.SYSTEMYEAR 

你也可以採取對您的第一個查詢和數據透視和數據透視彙總會成爲MAXMIN在這一點上,因爲你只會曾經有1行中的數據集中爲每個員工/月組合。

+0

優秀的電話托馬斯!這解決了問題。我甚至沒有想到在我的原始查詢中需要刪除它。非常感謝您的幫助! – Greg