2

私は、X 軸がシフトの時間である棒グラフを表示するレポートを担当しています。つまり、下に沿って 1 ~ 8 です。バーは、1 時間あたりのトランザクション数です。したがって、棒グラフを使用すると、最初の 1 時間で 30 件の注文を処理し、2 時間目には 25 件の注文を処理したというように、シフトの終わりまで簡単に確認できます。

ただし、このレポートを実際に作成する方法がわかりません。このようなことを行う唯一のオプションです(これは単なる疑似コードであることを理解してください。構文の問題についてわざわざコメントしないでください):

create table #temp
(
  Hour int,
  Units int
)

insert into #temp
SELECT 1 as Hour, sum(Units) Units
FROM orders
WHERE DateCreated >= '6/14/2013 08:00:00' AND DateCreated < '6/14/2013 09:00:00'

insert into #temp
SELECT 2 as Hour, sum(Units) Units
FROM orders
WHERE DateCreated >= '6/14/2013 09:00:00' AND DateCreated < '6/14/2013 10:00:00'

insert into #temp
SELECT 3 as Hour, sum(Units) Units
FROM orders
WHERE DateCreated >= '6/14/2013 11:00:00' AND DateCreated < '6/14/2013 12:00:00'

.. and so on ..

select * from #temp

また、これはレポートが呼び出すストアド プロシージャ内にあります。

これを行うより良い方法はありますか?1 日全体のデータをレポートに送信し、何らかの方法でそこで処理する必要がありますか? 任意の洞察をいただければ幸いです。

4

1 に答える 1

5
SELECT DATEPART(hh, DateCreated) AS hour, sum(Units) Units
FROM orders
WHERE DateCreated >= '6/14/2013' AND DateCreated < '6/15/2013'
GROUP BY DATEPART(hh, DateCreated)

詳しくはDATEPART() こちらをご覧ください。

もちろん、日、週など、必要に応じてさらにグループ化を追加できます。

SELECT DATEPART(dd, DateCreated) AS day, DATEPART(hh, DateCreated) AS hour, sum(Units) Units
FROM orders
WHERE DateCreated >= '6/10/2013' AND DateCreated < '6/15/2013'
GROUP BY DATEPART(dd, DateCreated), DATEPART(hour, DateCreated)
于 2013-06-14T12:48:43.030 に答える