2012-11-11 160 views
2

我已經閱讀了SQL中的數據透視表,並看到了大量的例子,但我無法按照我想要的方式得到它。我有一個跟蹤員工購買的交易歷史記錄表。SQL Server 2005數據透視查詢語法幫助

例子:

Employee | Date  | Value 
1234  | 2012-11-13 | 20.23 

我需要爲總銷售額每個月這樣所有員工摘要:

Employee | Jan | Feb | Mar | ... | Dec| YearTotal 

我感到困惑分組和獲得每月總數。 感謝您的幫助!

編輯 好的,我很抱歉,如果我遇到沒有準備請求援助。我大部分時間都在爲此工作,並且感到沮喪和疲憊。我已經有了超過10年的SQL經驗,但是這是我第一次試圖做一個數據透視查詢,我只是沒有弄明白他們應該如何工作,以及如何使它工作滿足我的需求。我需要在週一早上提供這些數字,所以大約7個小時。我最後的努力將是爲每個月運行一次單獨的查詢,然後將數據轉儲到Excel報告中。我希望這能夠讓最終用戶在未來運行無縫。

這是我嘗試的簡化版本,是從樣本返工從MSDN:

SELECT CUSTOMER_NUMBER, [jan], [feb] 
FROM 
    (
    SELECT month(transaction_date) 
    FROM customer_item_purchases 
    WHERE TRANSACTION_DATE BETWEEN '2011-11-16' AND '2012-11-15' 
    ) 
PIVOT 
(SUM(SALES_VALUE) IN ([JAN], [Feb])) 
AS pvt 

我需要指定的日期之間每個月總月度銷售。 11月份將在月份的開始和結束時出現。源表很簡單:員工,轉換日期,收據,位置等

+1

讓我們看到了一些努力和表演你的企圖...( –

+0

)我沒有任何嘗試,我嘗試着工作數據透視表,但我無法理解它。 – Kerberos42

+0

當我回家生病嘗試重新創建我試過的東西。 – Kerberos42

回答

3

小提琴例子(不知道這是否會保存,如果我沒有登錄,但現在工作:http://sqlfiddle.com/#!6/8c96a/3/15

我只有在透視3個月,但你的想法希望平時你有嵌套的選擇後, ,因爲你只需要轉動上某些列/組,然後將透視時,在那裏你列出你想成爲列名FOR mnth IN ([1], [2], [3])對應於Month(Date) as mnth字段中的值。

Create table Sales 
(EmpId int, Date DateTime, Value integer); 

Insert Into Sales (EmpId, Date, Value) 
Values (1,'1/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'2/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'3/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'4/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'5/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'6/1/2012', 12); 
Insert Into Sales (EmpId, Date, Value) 
Values (1,'7/1/2012', 12); 

Insert Into Sales (EmpId, Date, Value) 
Values (2,'1/1/2012', 112); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'1/15/2012', 112); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'2/1/2012', 312); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'3/1/2012', 512); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'4/1/2012', 2); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'5/1/2012', 3); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'6/1/2012', 1); 
Insert Into Sales (EmpId, Date, Value) 
Values (2,'7/1/2012', 0); 


SELECT EmpID, [1], [2], [3] 
FROM 
(SELECT EmpID, Month(Date) as mnth, Value 
FROM Sales) p 
PIVOT 
(
    Sum (Value) 
    FOR mnth IN 
([1], [2], [3]) 
) AS pvt 
ORDER BY pvt.EmpID; 
+0

非常感謝你,我是一個很擅長逆向工程的人,只要我有一些工作接近我需要的東西就可以找到答案。我設法把這個樣本變成了一個可行的解決方案。現在我想*我理解SQL樞紐。再次感謝你 – Kerberos42

0

您可以設置一個表格,每個月份有兩列(1,2,3,...,12),另一個爲3 ('Jan','Feb','Mar',...,'Dec')。您還可以使用一系列包裝在總計中的案例報表來計算每個員工的某個月銷售額,然後按員工分組。

這是一個分組和連接的問題,這是數據庫中的兩個基本概念。我可以給你我的答案,但如果你真的想學習,那麼我會同意米奇......展示一些努力。