1

1 人 1 日ごとに並べ替えられたエントリを持つ従業員テーブルがあります。

私はこのクエリを作成し、それは機能しますが、先週の合計作業時間ではなく、従業員が開始してからの合計作業時間の合計である必要があります。

誰かが助けることができますか?迷っています。ありがとうございました。

SELECT SSN, firstname, Lastname, SUM(CAST(Hours as float)) AS HourstoDate 
FROM Employees
WHERE CAST(Scheduled as datetime) >= DateAdd( d, DateDiff( d, 0, GetDate()-5 ), 0 )
GROUP BY SSN, Lastname, FirstName

SSN     FirstName   LastName    Scheduled       Hours
1234    Jane        Doe         Monday 9/26     10
1234    Jane        Doe         Tuesday 9/27    10

Jane は今週働いていたので、Jane のエントリをプルする必要がありますが、時間数は、今週彼女が働いた 20 時間ではなく、1525 時間である必要があります。

4

2 に答える 2

0

同じテーブルで 2 つの検索を 1 つにまとめているため、クエリが機能していません。特定の日付以降のレコードを検索し、同時に最初からすべてのレコードを取得することはできません。

これらの場合、私のアプローチは、テーブルをそれ自体と結合することです。理想的には、次のようにする必要があります。

select
  z.ssn
, z.firstname
, z.lastname
, sum ( cast ( eo.hours as float ) ) as hourstodate
from (
    select distinct
      ei.ssn
    , ei.firstname
    , ei.lastname
    from
      employees ei
    where
          cast ( ei.scheduled as datetime ) > dateadd ( ei.d , datediff ( ei.d , 0 , getdate() - 5 ) , 0 )
) z
join employees eo on ( z.ssn = eo.ssn and z.firstname = eo.firstname and z.lastname = eo.lastname )
group by
  z.ssn
, z.lastname
, z.firstdate

私はそれを試すことができないので、それがうまくいくことを保証することはできません. エラーが返された場合は、自由にコメントを追加してください。

編集:タイプミス

于 2016-09-30T20:47:02.547 に答える