おそらく、あなたは今あなたの質問に対する答えを見つけているでしょう。これは、この質問に出くわす可能性のある他の人向けです。SQL Server 2005 or above
このソリューションは、レポートのデータ ソースとして使用している場合にのみ適用できます。この例Common Table Expressions (CTE)
では、質問に記載されている目的の結果を達成するために使用します。以下の例ではSSRS 2005
、SQL Server 2008 R2
データベースを使用しています。CTE は でサポートされていSQL Server 2005 or above
ます。
段階的なプロセス:
という名前のテーブルを作成dbo.TimeScaleData
し、質問で提供されたデータを入力します。スクリーンショット # 1を参照してください。テーブルの作成スクリプトは、SQL スクリプトセクションにあります。
テーブル内の日付の最小値と最大値を取得し dbo.TimeScaleData
、指定された範囲内のすべての時間値を生成する CTE を作成します。次にOUTER APPLY
、CTE とテーブルの間で使用dbo.TimeScaleData
してデータをフェッチします。一致するレコードがない時間範囲には、値 0 が割り当てられます。スクリーンショット # 2を参照してください。このクエリは、SSRS レポートでデータセットを作成するために使用されます。クエリは、SSRS DataSet クエリセクションで提供されます。
スクリーンショット3は、レポート データセットの作成に CTE クエリが使用されていることを示しています。スクリーンショット # 4~ # 7は、Chart コントロールがデータセットを使用するように構成されている方法を示しています。
スクリーンショット # 8は、SQL Server テーブルのデータに対するレポート出力を示しています。
それが役立つことを願っています。
SQL スクリプト:
CREATE TABLE [dbo].[TimeScaleData](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DateTimeValue] [datetime] NULL,
[PalletsProduced] [int] NULL,
CONSTRAINT [PK_TimeScaleData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
SSRS データセット クエリ:
DECLARE @StartDateTime AS DATETIME;
DECLARE @EndDateTime AS DATETIME;
SELECT @StartDateTime = MIN(DateTimeValue)
, @EndDateTime = MAX(DateTimeValue)
FROM dbo.TimeScaleData;
WITH CTE(DateTimeRange) AS
(
SELECT @StartDateTime AS DateTimeRange
UNION ALL
SELECT DATEADD(HOUR, 1, DateTimeRange)
FROM CTE
WHERE DATEADD(HOUR, 1, DateTimeRange) <= @EndDateTime
)
SELECT CTE.DateTimeRange
, COALESCE(TSD.PalletsProduced, 0) AS PalletsProduced
FROM CTE
OUTER APPLY (
SELECT PalletsProduced
FROM dbo.TimeScaleData TSD
WHERE TSD.DateTimeValue = CTE.DateTimeRange
) TSD;
スクリーンショット #1:

スクリーンショット #2:

スクリーンショット #3:

スクリーンショット #4:

スクリーンショット #5:

スクリーンショット #6:

スクリーンショット #7:

スクリーンショット #8:
