2

ユーザーに日付範囲を選択させてから、SQLサーバーデータベースにクエリを実行して、時間で作業した日付を取得するプログラムがあります。すべて同じ列ではなく、独自の列に日付を入れたいです。例えば:

Employee   Total Hours  Monday 3/10  Tuesday 3/11 ....
Doe, John    40             8             8

現在のクエリは次のとおりです。

SELECT e.emp_fullname, t.tc_hours, t.punchDate 
FROM WaspTime.dbo.vEmployeeInfo as e, WaspTime.dbo.vTimeCards as t 
WHERE e.emp_id = t.tc_emp 
AND t.punchDate >= '03/10/2013'
AND t.punchDate <= '03/20/2013'

そしてこれが結果です:

Smith, Dan  8  2013-03-10 00:00:00.000
Smith, Dan  8 2013-03-11 00:00:00.000   
4

1 に答える 1

1

このような何か、あなたが持っているどんなに多くの期間も繰り返されます。

私はあなたがそうすると仮定しています:

  • あなたの時間SUM(または)する必要がありますか?COUNT?
  • ある種の@period_start_dateパラメータを使用して、各期間を1日、2日、3日などでオフセットします。

テキストエディタで手作業で行うので、タイプミスはご容赦ください。または、単純なことがうまくいかない場合は、アイデアは明確/健全だと思います。

CREATE PROCEDURE GetHoursWorkedInPeriod @periodStartDate datetime = getdate() AS
SELECT 
e.emp_fullname, 
sum(t1.tc_hours) as 'Day1Hours', 
min(t1.punchDate) as 'Day1Date'.

sum(t2.tc_hours) as 'Day2Hours', 
min(t2.punchDate) as 'Day2Date',

sum(t3.tc_hours) as 'Day3Hours', 
min(t3.punchDate) as 'Day3Date',

...and so on

FROM 
WaspTime.dbo.vEmployeeInfo as e

inner join WaspTime.dbo.vTimeCards as t1
on e.emp_id = t1.tc_emp 
AND t1.punchDate >= DATEADD (day , 0 , @periodStartDate )
AND t1.punchDate < DATEADD (day , 1 , @periodStartDate )

inner join WaspTime.dbo.vTimeCards as t2
on e.emp_id = t2.tc_emp 
AND t2.punchDate >= DATEADD (day , 1 , @periodStartDate )
AND t2.punchDate < DATEADD (day , 2 , @periodStartDate )

inner join WaspTime.dbo.vTimeCards as t3
on e.emp_id = t3.tc_emp 
AND t3.punchDate >= DATEADD (day , 2 , @periodStartDate )
AND t3.punchDate < DATEADD (day , 3 , @periodStartDate )

...and so on.

GROUP BY
e.emp_fullname

OPの要求に応じて、各期間を1日に制限するように編集されました。また、結果セットに時間の適用日が明示的に含まれています。

于 2013-03-22T16:11:39.227 に答える