1

MS Access Query の概念を理解するのに少し苦労しています。私はクエリが本当に苦手です。私はクエリビルダーを使用して作業を完了させているだけで、現時点で立ち往生しています。

状況は次のとおりです。

次のフィールドを持つトランザクションテーブルがあります

[グループ]、[日時]、[受取金額]、[その他のフィールド...]

例:

[ABC] [2013/11/11 20:15] [120.00]

[防御] [2013/12/11 06:10] [200.00]

[ABC] [2013/12/11 06:20] [10.00]

[ABC] [2013/12/11 06:50] [400.00]

私のレポート要件は、dd/mm/yy 06:30 から dd/mm/yy 06:29 に基づく日数の合計を表示することです。

したがって、2013 年 11 月 11 日の合計は、2013 年 11 月 11 日 06:30 から 2013 年 12 月 11 日 06:29 に該当するトランザクションで計算する必要があります。

レポートの日付を取得し、時間範囲に基づいてすべてのグループの 1 日の合計を提供できるクエリを作成できないようです。さらに、各グループは異なる時間制限を持つことができます。ルックアップ テーブルを使用してみましたが、先に進めないようです。

どんな助けにも感謝します。必要に応じて、喜んでさらに説明します。

ありがとう、

4

2 に答える 2

0

私の提案は、Access で [transactionsWithEffectiveDate] という名前の保存済みクエリを作成することです。

【お取引について】

Group  Date Time            Receipt Amount
-----  -------------------  --------------
ABC    2013-11-11 20:15:00             120
DEF    2013-11-12 06:10:00             120
ABC    2013-11-12 06:20:00              10
ABC    2013-11-12 06:49:00             400
ABC    2013-11-12 06:50:00             200
ABC    2013-11-12 06:51:00             250

と [グループ]

Group  StartTime
-----  ---------
ABC    06:50:00 
DEF    05:30:00 

クエリ

SELECT 
    Group, 
    [Date Time], 
    [Receipt Amount],
    DateAdd("d", IIf(DateDiff("s", NewDayStart, [Date Time]) < 0, -1, 0), CDate(Int(t.[Date Time]))) AS EffectiveDate
FROM
    (
        SELECT 
            t.Group, 
            t.[Date Time], 
            t.[Receipt Amount],
            CDate(Int(t.[Date Time]) + (g.StartTime - Int(g.StartTime))) AS NewDayStart
        FROM
            transactions t
            INNER JOIN
            groups g
                ON g.Group = t.Group
    )

戻り値

Group  Date Time            Receipt Amount  EffectiveDate
-----  -------------------  --------------  -------------
ABC    2013-11-11 20:15:00             120  2013-11-11   
DEF    2013-11-12 06:10:00             120  2013-11-12   
ABC    2013-11-12 06:20:00              10  2013-11-11   
ABC    2013-11-12 06:49:00             400  2013-11-11   
ABC    2013-11-12 06:50:00             200  2013-11-12   
ABC    2013-11-12 06:51:00             250  2013-11-12   

その後、そのクエリを後続のクエリやレポートの基礎として使用できます。

SELECT 
    EffectiveDate, 
    Sum([Receipt Amount]) AS [SumOfReceipt Amount]
FROM transactionsWithEffectiveDate
GROUP BY EffectiveDate;
于 2013-11-13T10:53:53.847 に答える
0

msaccess の構文が正しいかどうかよくわかりませんが、[Date Time] を 6 時間 30 分戻して、それを営業日として使用することをお勧めします。

select 
  [Group]
, DateAdd("h",-6,DateAdd("n",-30,[Date Time])) AS [Business Day]
, sum([Receipt Amount]) AS [Receipt Amount Sum]
from yourTable
group by 
  [Group]
, DateAdd("h",-6,DateAdd("n",-30,[Date Time]));
于 2013-11-13T10:26:04.333 に答える