2014-05-02 172 views
0

使用SQL 2008 R2和在Excel中使用我的Q數據數據透視圖(喜悅)!所以我不能刪除/過濾任何數據,只能添加到新的列中:日期具體計算sql

month user target 
    1  001 1000 
    1  001 1000 
    1  002 2000 
    1  001 1000 
    2  002 2000 
    2  002 2000 
    3  002 2000 
    3  002 2000 
    4  002 2000 

我想應該是這樣的內容:

month user target New col 
    1  001 1000 1000 
    1  001 1000  0 
    1  002 2000 2000 
    1  001 1000  0 
    2  002 2000 2000 
    2  001 2000 1000 
    3  002 2000 2000 
    3  002 2000  0 
    3  002 2000  0 
    3  001 2000 1000 
    4  002 2000 2000 
    4  001 1000 1000 

所以基本上我希望每個用戶的目標只有一個新的一個月的第一個實例顯示,然後顯示「0」爲每個實例此後一個月。這個查詢需要一個年度目標,並將其除以12來獲得每月的水平。在我的示例中,用戶001的目標金額將是「新上限」而不是「目標」列的總和,因爲計算年度/ 12時,它只是將該金額存入任何存在用戶記錄的位置並彙總該列遠遠超過實際目標。

所以這就是說,對於每個月,用戶001的每月目標爲1000,而用戶002的每月目標爲2000.這就是爲什麼我無法總結目標列。

爲什麼我需要這種格式?因爲這些數據在其他數據的excel中被用在數據透視圖中,我需要將它彙總並彙總爲excel中的總計。所以我不想總結'目標專欄',而是總結'新專欄',然後當我看到所有員工在我的關鍵點上時,它總計了這些員工的目標,當我深入到個人,它只顯示我個人的目標。

這讓我難以忍受的搜索遍佈網路的日子,沒有快樂。如果有人真的試圖幫助我,但是我想問/想要讓我困惑,我會在這裏更新/編輯任何需要的東西。這將是如此巨大,如果我能得到這個解決!

+0

什麼專欄告訴你,如果「實例」是第一個? – Lamak

+0

如果您的約束條件允許使用臨時表,您可能會發現在兩個或更多遍中執行操作更容易:首先通過SELECT DISTINCT month,user,target,second pass來添加其他行,例如 – Angst

+0

所以我在想Row_Count()或者我有一個唯一的col,我們可以調用ROWID,它是增量式的,也可以使用。我可以使用與't1'形式的臨時表作爲(選擇.....) – user3486773

回答

1

這是否符合你的要求?

CREATE TABLE [dbo].[Users](
[month] [int] NOT NULL, 
[user] [int] NOT NULL, 
[target] [int] NOT NULL 
) ON [PRIMARY] 

GO 

DELETE FROM users 

insert into users ([month], [user], [target]) values 
(1,001,1000), (1,001,1000),(1,002,2000),(1,001,1000), (2,002,2000), (2,002,2000), 
(3,002, 2000), (3,002,2000), (4, 002, 2000); 

With RowAdded AS (
SELECT ROW_NUMBER() OVER(Partition By [user],[month] order by [user]) AS RowNum, 
U.* 
FROM users U), 

Targeted AS (
    SELECT 
    RA.[month], 
    RA.[user], 
    CASE WHEN RowNum = 1 THEN [target] 
    ELSE 0 END AS target 
    FROM RowAdded RA) 

SELECT * FROM Targeted 
+0

現在嘗試一切。當我把它翻譯成我的工作Q(我不能發佈)時,請忍受我的問題 – user3486773

+0

當然,作爲一個附註,在這些問題中添加sql create和seed語句將爲您帶來更好的結果,這樣人們可以輕鬆地獲得幫助而不是通過創建表格,添加數據等努力。 –

+0

我想補充一點,我沒有采用這種逐字記錄,但是選擇語句中的內容能夠被修改以使其起作用。我會用我使用的代碼編輯這個評論,但史蒂夫傑克遜,不能感謝你足夠的 – user3486773