1

私は数か月間 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 について頭を悩ませようとしているだけです。

ありがとう。

4

0 に答える 0