0

次のようなテーブルがあります。

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
4

1 に答える 1

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 FiddlewithDemoを参照してください

結果は次のとおりです。

| 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 |
于 2013-01-04T13:19:42.950 に答える