2009-11-03 5 views
0

Utilisation de SQL Server 2005Comment répéter les valeurs entre les deux dates?

Je veux générer les valeurs de la table entre les deux dates

Tableau 1

ID Date  Intime Outtime 

01 12-02-2009 10:00:00 17:00:00 
02 13-02-2009 08:00:00 16:00:00 
03 14-02-2009 09:00:00 21:00:00 
04 15-02-2009 

Supposons que je veuille générer les valeurs de la table ci-dessus entre les deux dates.

Par exemple,

Prénom Date: date de début - 12-02-2009 pour mettre fin à ce jour - 12-03-2009

Sortie prévue,

ID Date  Intime Outtime 

01 12-02-2009 10:00:00 17:00:00 
02 13-02-2009 08:00:00 16:00:00 
03 14-02-2009 09:00:00 21:00:00 
04 15-02-2009 
05 16-02-2009 10:00:00 17:00:00 
06 17-02-2009 08:00:00 16:00:00 
07 18-02-2009 09:00:00 21:00:00 
08 19-02-2009 
09 20-02-2009 10:00:00 17:00:00 
…, 

donc de table1 nous avons 4 lignes, de sorte que les 4 lignes se répètent jusqu'à la date de fin donnée, mais l'identifiant et la date doivent être incrémentés, l'identifiant et la date ne doivent pas être répétés.

Comment faire une requête SQL pour cette condition?

Besoin d'aide pour la requête.

Répondre

2

Essayez cela aussi ...

declare @startdate datetime 
    declare @enddate datetime 

    set @startdate = '12-02-2009' 
    set @enddate = '12-05-2009' 

    ;with num_cte as 
    (
      select top(datediff(day,@startdate,@enddate)) ROW_NUMBER() OVER (ORDER BY c.column_id) AS rn 
      from sys.columns c 
    ) 
    , generate_date_cte as 
    ( 
      select 1 as Id,@startdate as newdate 
      union all 
      select rn+1 as Id, newdate 
      from num_cte 
      cross apply(select DATEADD(day,rn,@startdate) AS newdate) x 
    ) 
    select * from generate_date_cte 
0

Essayez cette

declare @startdate datetime 
declare @enddate datetime 

set @startdate = '12-02-2009' 
set @enddate = '12-05-2009' 

;with generateCalender_cte as 
(
select 
1 as Id 
,@startdate DateValue 
union all 
select 
c.Id + 1    
    ,DateValue + 1 
from generateCalender_cte c 
where DateValue + 1 <= @enddate 
) 

select * from generateCalender_cte 
0

Une autre solution

declare @startdate datetime 
    declare @enddate datetime 

    set @startdate = '12-02-2009' 
    set @enddate = '12-05-2009' 

    ; with generateCalender_cte as 
    (
      select 
      1 as Id 
      ,@startdate as newdate 
      union all 
      select 
      c.Id + 1 
      ,DATEADD(day,1,c.newdate) 
      from generateCalender_cte c 
      where c.newdate <@enddate 
    ) 
    select * from generateCalender_cte 
Questions connexes