2016-12-29 70 views
1

我有一張測試運行表,每天運行3次。我需要顯示加載時間的平均值的歷史數據可配置天數的歷史報告

testID testName runID date   LoadTime 

1  Test1  r1  08-01-2016 2.04 
1  Test1  r2  08-01-2016 2.02 
1  Test1  r3  08-01-2016 2.01 
2  Test2  r1  08-01-2016 2.04 
2  Test2  r2  08-01-2016 2.02 
2  Test2  r3  08-01-2016 2.01 
1  Test1  r1  08-02-2016 2.00 
1  Test1  r2  08-02-2016 2.04 
1  Test1  r3  08-02-2016 2.05 
2  Test2  r1  08-02-2016 2.03 
2  Test2  r2  08-02-2016 2.02 
2  Test2  r3  08-02-2016 2.04 
. 
. 
. 
. 

這裏我們有2個測試的歷史數據。每個測試每天有3次運行,我們有數月的數據。我需要以下格式的歷史數據

testID testName 08-01-2016 08-02-2016 ........... 08-31-2016 

1  Test1  2.04  2.05  ........... 2.01 
2  Test2  2.02  2.05  ........... 2.01 

這意味着我將有行數等於唯一的testID和日期列。數據平均每次測試3次。

我知道我們必須在這裏使用Pivot,但主要挑戰是獲取動態列名稱。例如上面的結果是8月份,但是基於日期變量,我應該得到不同月份的數據。

回答

0

這是平均水平,但你想要的結果看起來最大

Declare @Date1 date = '2016-08-01' 
Declare @Date2 date = '2016-08-31' 

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Date]) From Yourtable Where Date between @Date1 and @Date2 Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [testID],[testName],' + @SQL + ' 
From (
     Select testID,testName,date,LoadTime 
     From YourTable 
     Where Date Between '''+cast(@Date1 as varchar(10))+''' and '''+cast(@Date2 as varchar(10))+''' 
    ) A 
Pivot (avg(LoadTime) For [Date] in (' + @SQL + ')) p' 
Exec(@SQL); 

返回

testID testName 2016-08-01 2016-08-02 
1  Test1  2.023333 2.030000 
2  Test2  2.023333 2.030000 
+0

噢,是的,其實這是虛擬數據,我想沒有人會注意到:)接受這個答案 – gaurav

+0

@gaurav如果每次我妻子都說我有一個暱稱:) –