2017-12-19 9 views
1

私は、複数のソースから定期的にデータを収集し、すべてのデータを1つの列に一覧表示するシステムを持っています。私はそれを成功裏にピボットして、各ソースごとに個別の列があるようにしました(下記のコードと出力を参照してください)。SQL動的ピボットクエリに条件を追加する方法は?

私の質問は:どのようにこのコードで私は特定の日(DateAndTime BETWEEN "time1"と "time2")からのみデータを引っ張って時間を増やす?

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) 
DECLARE @ColumnName AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT @ColumnName= ISNULL(@ColumnName + ',','') 
     + QUOTENAME(TagIndex) 
FROM (SELECT DISTINCT TagIndex FROM dbo.FloatTable1) AS TagIndex 
ORDER BY TagIndex 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
    N'SELECT DateAndTime, ' + @ColumnName + ' 
    FROM dbo.FloatTable1 
    PIVOT(SUM(Val) 
      FOR TagIndex IN (' + @ColumnName + ')) AS PVTTable' 
--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 

これは、次のように出力します

**DateAndTime     0      1     2** 
2017-12-12 16:27:41.000 17.7175064086914 0.04730224609375 -0.154193878173828 
2017-12-13 10:41:19.000 17.4271354675293 0.197725296020508 -0.000985145568847656 
2017-12-16 22:05:15.000 -0.0419089868664742 0.0367603302001953 0.00866413116455078 
2017-12-16 13:20:25.000 -0.0222898945212364 0.0417251586914063 0.00660228729248047 
2017-12-14 13:15:27.000 17.1524677276611 0.158931732177734 -0.0414285659790039 
2017-12-13 12:17:28.000 17.4389095306396 0.217489242553711 0.0163974761962891 
2017-12-13 22:41:27.000 17.3408145904541 0.133147239685059 -0.062190055847168 
+0

動的クエリに追加します。 –

答えて

1

以下のようなwhere句の追加:

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
    N'SELECT DateAndTime, ' + @ColumnName + ' 
    FROM dbo.FloatTable1 
    PIVOT(SUM(Val) 
      FOR TagIndex IN (' + @ColumnName + ')) AS PVTTable 
WHERE DateAndTime BETWEEN ''VAL1'' AND ''VAL2'' ORDER BY DateAndTime' 

HTHを!

関連する問題