2013-01-04 64 views
0

我有一個表,如下所示:SQL CTE多個記錄

StudentID CourseID StartDate EndDate 
    1  1  12/21/2012 12/23/2012 
    1  2  12/31/2012 1/2/2013 
    2  1  12/10/2012 12/10/2012 

我怎樣才能得到輸出像以下(使用CTE或任何其他技術)

StudentID CourseID Date 
    1   1  12/21/2012 
    1   1  12/22/2012 
    1   1  12/23/2012 
    1   2  12/31/2012 
    1   2  01/01/2013 
    1   2  01/02/2013 
    2   1  12/10/2012 
+0

你使用的是什麼rdbms? SQL服務器,甲骨文? – Taryn

回答

2

您可以使用以下:

;with dates(studentid, courseid, date, enddate) as 
(
    select studentid, courseid, startdate, enddate 
    from yourtable 
    union all 
    select studentid, courseid, dateadd(day, 1, date), enddate 
    from dates 
    where dateadd(day, 1, date) <= enddate 
) 
select studentid, courseid, date 
from dates 
order by studentid, courseid; 

SQL Fiddle with Demo

結果是:

| STUDENTID | COURSEID |  DATE | 
------------------------------------- 
|   1 |  1 | 12/21/2012 | 
|   1 |  1 | 12/22/2012 | 
|   1 |  1 | 12/23/2012 | 
|   1 |  2 | 12/31/2012 | 
|   1 |  2 | 01/01/2013 | 
|   1 |  2 | 01/02/2013 | 
|   2 |  1 | 12/10/2012 |