2016-12-29 1 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つのテストの履歴データがあります。各テストには1日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と日付を列として持つことを意味します。データは1回のテストにつき1日当たり平均3回です。

ここでピボットを使用する必要があることはわかっていますが、主な課題は動的な列名を取得することです。例えば上記の結果は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私の妻が言ったたびにニックルを持っていたら:) –