1

次のクエリで助けが必要

現時点では、年間四半期ごとにグループ化された「勤務時間」を持つユーザーのリストが表示されます。また、勤務日数で合計したいと思います。問題は、1 日につき複数の行が存在する可能性があるため、"onsitedate" の合計が正しくないことです。結果は四半期ごとに表示する必要があるため、「日」でグループ化することはできません。

SQL

SELECT 
  username,
  DatePart ('q', [onsitedate]) AS [qtr],
  SUM(onsitehours),
  SUM(onsitedate)
FROM
  clocktable 
WHERE onsitedate BETWEEN #2013-01-01# AND #2013-12-31#
GROUP BY username, DatePart('q',[onsitedate]) 
ORDER BY username, DatePart('q',[onsitedate]) 

詳細情報と TQ が必要な場合はお知らせください

アップデート

前述のように、サイト日付行で COUNT を使用する必要があります (タイプミス)

SELECT 
  username,
  DatePart ('q', [onsitedate]) AS [qtr],
  SUM(onsitehours),
  **COUNT(onsitedate)**
FROM

ただし、同じ日付に2つのレコードが存在する場合、カウントを1にしたいと思います

サンプルデータは以下のとおりです。

username        onsitedate         onsitehours
-----------------------------------------------
bob             01/09/2013         10
bob             01/09/2013         2
fred            01/09/2013         12
jim             01/09/2013         10
jim             02/09/2013         5

必要なRS

username    qtr    onsitedate_count         onsitehours_sum
--------------------------------------------------------- 
bob         3      1                        12
fred        3      1                        12
jim         3      2                        15

ご覧のとおり、bob には 2013 年 1 月 9 日に 2 つのレコードがありますが、同じ日であるため、onsitedate_count は 1 のままです。

また、日が最初にグループ化されるようにフォローしようとしましたが、喜びはありません

GROUP BY tech_name, DatePart('d',[on_site_date]), DatePart('q',[on_site_date]) 
4

2 に答える 2

2

onsitehours最初に、 と のfor each の組み合わせusernameを合計するクエリを作成しますonsitedate

SELECT 
    username,
    DatePart ('q', [onsitedate]) AS [qtr],
    onsitedate,
    SUM(onsitehours) AS SumOfonsitehours
FROM
    clocktable 
WHERE onsitedate BETWEEN #2013-01-01# AND #2013-12-31#
GROUP BY username, DatePart('q',[onsitedate]), onsidedate;

username次に、それをサブクエリとして使用し、日付を数え、との組み合わせごとに時間を再度合計しqtrます。

SELECT
    sub.username,
    sub.qtr,
    Count(sub.onsitedate) AS onsitedate_count,
    Sum(sub.SumOfonsitehours) AS onsitehours_sum
FROM
    (
        SELECT 
            username,
            DatePart ('q', [onsitedate]) AS [qtr],
            onsitedate,
            SUM(onsitehours) AS SumOfonsitehours
        FROM
            clocktable 
        WHERE onsitedate BETWEEN #2013-01-01# AND #2013-12-31#
        GROUP BY username, DatePart('q',[onsitedate]), onsitedate
    ) AS sub
GROUP BY sub.username, sub.qtr
ORDER BY sub.username, sub.qtr;

サンプル データを使用するclocktableと、そのクエリは Access 2007 で要求された出力を返します。

于 2013-09-23T12:07:54.853 に答える