2014-09-24 88 views
2

我想要排列多個系列,以便所有里程碑日期都設置爲零個月,這樣我就可以測量里程碑的前後效應。我希望能夠使用SQL服務器來做到這一點。如何將事件計數分配給SQL中的相對日期值?

你可以看到我從this data.stackexchange.com query開始的近似值。此示例查詢返回一個基本如下所示的表:

+------------+-------------+---------+---------+---------+---------+---------+ 
| UserID | BadgeDate | 2014-01 | 2014-02 | 2014-03 | 2014-04 | 2014-05 | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 7  | 2014-01-02 | 232  | 22  | 19  | 77  | 11  | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 89  | 2014-04-02 | 345  | 45  | 564  | 13  | 122  | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 678  | 2014-03-11 | 55  | 14  | 17  | 222  | 109  | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 897  | 2014-03-07 | 234  | 56  | 201  | 19  | 55  | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 789  | 2014-02-22 | 331  | 33  | 67  | 108  | 111  | 
+------------+-------------+---------+---------+---------+---------+---------+ 
| 989  | 2014-01-09 | 12  | 89  | 97  | 125  | 323  | 
+------------+-------------+---------+---------+---------+---------+---------+ 

這不是我最終尋找的。月份列中的值是每月答案的計數。我想要的是一張表格,其計數在之間,相對月份數量爲(由BadgeDate定義)(BadgeDate月份設置爲每個用戶月份0,較早的月份設置爲負的相對月份#s,後面的月份設置爲正相對月份#s )。

這是可能的SQL?或者有沒有辦法在Excel中使用上表來完成它?

生成此表後,我計劃平均相對月份總數來繪製一個線圖,該線圖有望在相對月零時顯示明顯的拐點。如果沒有明顯的彎曲,我可以假設里程碑對Y軸度量的影響可以忽略不計。 (我甚至不太確定這種圖表的名稱,如果我知道我正在討論的內容的適當條款,Google可能會更有幫助。)

任何想法?

回答

2

這也恰恰是聚合函數和情況下... THEN ... ELSE ... END結構是:

select 
    UserID 
    ,BadgeDate 
    ,sum(case when AnswerDate = '2014-01' then 1 else 0 end) as '2014-01' 
    -- etc. 
group by 
    userid 
    ,BadgeDate 

PIVOT子句也可以在SQL的一些風格和版本,但總的來說不那麼靈活,所以傳統的機制是值得理解的。

同樣,EXCEL中的PIVOT TABLE構造可以生成相同的報告,但是在帶寬競爭環境中最大限度地聚合服務器上的數據是有價值的。

+0

對不起,我可能不清楚。上面提供的表格是我已經擁有的,而不是我希望返回的。我編輯了這個問題來強調這個事實。 – samthebrand 2014-09-24 04:20:30

+1

@SamtheBrand:好的。您可以UNPIVOT,按月執行日期差異,然後在連續的子查詢中再次跳出。 Aaron Bertrand在此處有一個腳本(http://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/)用於動態數據透視查詢生成。 Itzik Ben-Gan使用CROSS APPLY發佈了一個優雅的UNPIVOT,但我現在還不能找到參考。 – 2014-09-24 04:31:04

+0

@SamtheBrand:Itzik的CROSS APPLY UNPIVOT的源代碼可以在這裏找到:http://www.sql.co.il/books/source_code/Advanced%20T-SQL.txt。搜索字符串' - *** Unpivoting'來查找示例SQL。 – 2014-09-24 04:36:59

相關問題