私は数か月間 SQL をいじっているだけなので、気楽にやってください。
だから私は現在、次のようなものを返す次のものを持っています:
SELECT WorkItems.workDate
, SUM(WorkItems.hours)as [hours]
, WorkItems.techID
FROM Jobs
INNER JOIN WorkItems
ON Jobs.jobID = WorkItems.jobID
INNER JOIN Techs
ON Jobs.techID = Techs.techID
WHERE (WorkItems.workDate BETWEEN @startdate AND @enddate)
AND (WorkItems.techID = 41)
GROUP BY WorkItems.workDate
, WorkItems.techID
戻り値:
2013-06-03 00:00:00.000 7.00 41
2013-06-05 00:00:00.000 7.00 41
2013-06-06 00:00:00.000 7.50 41
2013-06-07 00:00:00.000 1.00 41
クエリによって残された日付のギャップを埋めて、次のようなものを取得しようとしています:
2013-06-03 00:00:00.000 7.00 41
2013-06-04 00:00:00.000 0 41
2013-06-05 00:00:00.000 7.00 41
2013-06-06 00:00:00.000 7.50 41
2013-06-07 00:00:00.000 1.00 41
定義された範囲内ですべてを生成して日付を追加しようとしましたが、今は重複しています。
Declare @t table(Date datetime, hoursWorked int, tech int)
Declare @startdate datetime
Declare @enddate datetime
declare @techID int
Set @startdate='06/02/2013'
Set @enddate='06/07/2013'
Set @techID='41'
Select dateadd(day,number,@startdate) as workDate, 0 as [hours], @techID from master.dbo.spt_values
where master.dbo.spt_values.type='p' and dateadd(day,number,@startdate)<=@enddate
and dateadd(day,number,@startdate) not in
(select date from @t)
UNION
SELECT WorkItems.workDate, SUM(WorkItems.hours)as [hours], WorkItems.techID
FROM Jobs INNER JOIN
WorkItems ON Jobs.jobID = WorkItems.jobID INNER JOIN
Techs ON Jobs.techID = Techs.techID
WHERE (WorkItems.workDate BETWEEN @startdate AND @enddate) AND (WorkItems.techID = 41)
GROUP BY WorkItems.workDate, WorkItems.techID
戻り値:
2013-06-02 00:00:00.000 0.00 41
2013-06-03 00:00:00.000 0.00 41
2013-06-04 00:00:00.000 0.00 41
2013-06-04 00:00:00.000 7.00 41
2013-06-05 00:00:00.000 0.00 41
2013-06-05 00:00:00.000 7.00 41
2013-06-06 00:00:00.000 0.00 41
2013-06-06 00:00:00.000 7.50 41
2013-06-07 00:00:00.000 0.00 41
2013-06-07 00:00:00.000 1.00 41
このクエリが価値のあるものである場合は申し訳ありませんが、SQL について頭を悩ませようとしているだけです。
ありがとう。