2009-09-02 33 views
1

レポートと作成日時を含むテーブルがあります。私は8時間〜9時00分と午後1時〜午後2時の間に10分の間隔で作成されたレポートの数を集計するグラフを作成したいと思います。ここで日付範囲から時間範囲を選択Accessの時間フィールド

は、私が実行したいクエリの例です:

SELECT 
s.StudyStartDateTime AS "8:00 - 8:10", 
s.StudyStartDateTime AS "8:10 - 8:20", 
s.StudyStartDateTime AS "8:20 - 8:30", 
s.StudyStartDateTime AS "8:30 - 8:40", 
s.StudyStartDateTime AS "8:40 - 8:50", 
s.StudyStartDateTime AS "8:50 - 9:00", 
s.StudyStartDateTime AS "1:00 - 1:10", 
s.StudyStartDateTime AS "1:10 - 1:20", 
s.StudyStartDateTime AS "1:20 - 1:30", 
s.StudyStartDateTime AS "1:30 - 1:40", 
s.StudyStartDateTime AS "1:40 - 1:50", 
s.StudyStartDateTime AS "1:50 - 2:00" 
FROM 
    dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT("8:00 - 8:10", 'hh:mm:ss') BETWEEN "08:00:00" AND "08:09:59" 
AND FORMAT("8:10 - 8:20", 'hh:mm:ss') BETWEEN "08:10:00" AND "08:19:59" 
AND FORMAT("8:20 - 8:30", 'hh:mm:ss') BETWEEN "08:20:00" AND "08:29:59" 
AND FORMAT("8:30 - 8:40", 'hh:mm:ss') BETWEEN "08:30:00" AND "08:39:59" 
AND FORMAT("8:40 - 8:50", 'hh:mm:ss') BETWEEN "08:40:00" AND "08:49:59" 
AND FORMAT("8:50 - 9:00", 'hh:mm:ss') BETWEEN "08:50:00" AND "08:59:59" 
AND FORMAT("1:00 - 1:10", 'hh:mm:ss') BETWEEN "01:00:00" AND "01:09:59" 
AND FORMAT("1:10 - 1:20", 'hh:mm:ss') BETWEEN "01:10:00" AND "01:19:59" 
AND FORMAT("1:20 - 1:30", 'hh:mm:ss') BETWEEN "01:20:00" AND "01:29:59" 
AND FORMAT("1:30 - 1:40", 'hh:mm:ss') BETWEEN "01:30:00" AND "01:39:59" 
AND FORMAT("1:40 - 1:50", 'hh:mm:ss') BETWEEN "01:40:00" AND "01:49:59" 
AND FORMAT("1:50 - 2:00", 'hh:mm:ss') BETWEEN "01:50:00" AND "01:59:59" 

は残念ながら、アクセスが、私はFORMAT関数内でフォーマットしたいのですが、フィールドが参照していることを伝えることができないようですクエリ内の同じ名前のフィールドに追加します。上記のケースでは、Accessがこれを文字列リテラルとして扱っているためと考えています。しかし、これはうまくいかない:

アクセスは私に 'first'の値を求めている。

私はこれを間違った方法で始めると感じています。誰かが私を正しい方向に向けることができますか?

詳細情報:JetエンジンをODBC経由で使用していますが、実際にはSQL Server 2005にデータが格納されているため、必要に応じてパススルークエリを作成できます。理想的には、私はAccessで働くことを望みます。

EDIT:

明確にするため、次の作業を行います。

SELECT s.StudyStartDateTime AS first 
FROM dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT(StudyStartDateTime,'hh:mm:ss') Between "08:00:00" And "08:09:59"; 

これは、しかし、私は複数の条件の下で、同じフィールドを複数回選択することはできません。

http://office.microsoft.com/en-us/access/HA012288391033.aspx#examplesの最初の例では、角括弧内のフィールドのエイリアスをラップするレコードソースを参照するための正しい方法であるが、以下では、まだ「最初の」の値のプロンプトをもたらすことを示唆している:

SELECT s.StudyStartDateTime AS first 
FROM dbo_Study_ViewX211_Rpt AS s 
WHERE FORMAT([first],'hh:mm:ss') Between "08:00:00" And "08:09:59"; 

編集II:数レコードのStudyStartDateTimeの内容の

例:

29/11/2007 8:06:00 AM 
30/11/2007 8:09:01 AM 
05/12/2007 8:06:51 AM 
06/12/2007 8:07:21 AM 

アクセスは、このFiのを見て"日付/時刻"データ型として使用します。

私の最終目標は、各区間のタリーをグラフ化することです。私は、これを行う最も簡単な方法は、別のエイリアスとして各日付/時刻を選択することだと思います。たとえば:

+0

PARTITION()を調べましたか? –

答えて

3

問題は、アクセスが同じクエリ内のエイリアスによってフィールドを参照しないためです。つまり、select句にエイリアスを割り当ててwhere句で使用することはできません。あなたの質問の最初の部分については

、あなたはこの

SELECT 
     sum(iif(FORMAT(s.StudyStartDateTime,'hh:mm:ss') 
       BETWEEN "08:00:00" AND "08:09:59",1,0)) as "8:00 - 8:10", 
     sum(iif(FORMAT(s.StudyStartDateTime,'hh:mm:ss') 
       BETWEEN "08:10:00" AND "08:19:59",1,0)) as "8:10 - 8:20", 
     ... 
    FROM dbo_Study_ViewX211_Rpt AS s 

これはあなたに、各10分の期間の集計を与えるような何かを試すことができます。

+0

パーフェクト。私はこれについて間違った方法をとっていることを知っていました。ありがとう! – Richard

関連する問題