2016-12-29 71 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如果每次我妻子都说我有一个昵称:) –