2017-01-18 10 views
1

にでは、私は今の日が上にのみ設定された変数の期間で雇うカウントしようとしているカウント数がon_hire JAN

SQL Show all items that are on hire before and up until a certain date

私の前の質問へのフォローアップ。

私はツールは、ツールがまだ出ている場合、それは使用する日であること

,(CASE WHEN off_hire = '21121231' 
     THEN datediff(DAY, on_hire, GETDATE()) 
     ELSE datediff(DAY, on_hire, offhire)+1 
    END) AS 'DAYS_OF_RENTAL' 

21121231を使用してレンタルにある日数を出してきました。

私はそれだけでこれは明らかに機能していないが、これは私が現時点でしようとしてきたルートである

,(CASE WHEN (on_hire > @startdate) AND off_hire > @end_date 
     THEN datediff(DAY, @startdate, @enddate) 
     ELSE datediff(DAY, on_hire, off_hire)+1 
    END) AS 'CALC_DAYS_ON_HIRE' 

を使用してJANでレンタルしていた日数をうまくしようとしています。

例のデータ

tool  on_hire off_hire 
tool 1 02/01/2016 15/01/2016 
tool 2 16/12/2015 16/01/2016 
tool 3 05/01/2016 20/02/2016 

私はすべてのヘルプは大歓迎され、私は:-)

乾杯

答えて

0

何かをまだ学んが、そこに取得しています変数set @startdate = 20160101@enddate = 20160131

を持っていますこのような?

declare @t table (id int, tool varchar(10), on_hire date, off_hire date); 
insert into @t values 
(1,1,'2016-01-01','2016-01-10'), 
(2,1,'2016-01-15','2016-01-20'), 
(3,2,'2015-12-01','2016-01-10'), 
(4,3,'2016-01-20','2016-02-10'), 
(5,4,'2015-01-01','2017-01-10') 


select tool, sum(datediff(d,on_hire,off_hire)) + 1 dayshired 
from 
(
select tool, 
     case 
      when on_hire < '2016-01-01' then '2016-01-01' 
      else on_hire 
     end as on_hire, 
     case 
      when off_hire > '2016-01-31' then '2016-01-31' 
      else off_hire 
     end as off_hire   
from @t 
) s 
group by s.tool 
0

私はこの

,(CASE WHEN (on_hire < @startdate) AND off_hire > @enddate 
     THEN datediff(DAY, @startdate, @enddate)+1 

     WHEN (on_hire < @startdate) AND off_hire < @enddate 
     THEN datediff(DAY, @startdate, off_hire)+1 

     WHEN (on_hire > @startdate) AND off_hire > @enddate 
     THEN datediff(DAY, on_hire, @enddate) 

      WHEN (on_hire > @startdate) AND off_hire < @enddate 
     THEN datediff(DAY, on_hire, off_hire) 

    END) AS 'CALC_DAYS_ON_HIRE' 
ようにそれをやってしまいました