0

その日に基づいて日付をサブクエリに挿入したいと思います。さらに、各日付は 4 回しか使用できません。4 回目に達すると、5 回目の値は同じ日の別の日付を使用します。つまり、翌週の月曜日の日付を使用します。例、Mondaywith 6 JUNE 2016to Mondaywith 13 JUNE 2016(カレンダーで確認できます)。

テーブルに基づいて、テーブルから日付のリストを取得するクエリがpresentationdatestartありますpresentationdateendpresentation

select   a.presentationid,
         a.presentationday,
         to_char (a.presentationdatestart + delta, 'DD-MM-YYYY', 'NLS_CALENDAR=GREGORIAN') list_date
from     presentation a,
         (select     level - 1 as delta
          from       dual
          connect by level - 1 <= (select max (presentationdateend - presentationdatestart)
                                   from   presentation))
where    a.presentationdatestart + delta <= a.presentationdateend
and      a.presentationday = to_char(a.presentationdatestart + delta, 'fmDay')
order by a.presentationdatestart + delta,
         a.presentationid; --IMPORTANT!!!--

例えば、

presentationday    presentationdatestart    presentationdateend
     Monday              01-05-2016             04-06-2016
    Tuesday              01-05-2016             04-06-2016
   Wednesday             01-05-2016             04-06-2016
   Thursday              01-05-2016             04-06-2016

01-05-2016クエリ結果には、までのすべての可能な日付がリストされます04-06-2016:

Monday  02-05-2016
Tuesday 03-05-2016
Wednesday   04-05-2016
Thursday    05-05-2016
....
Monday      30-05-2016
Tuesday     31-05-2016
Wednesday   01-06-2016
Thursday    02-06-2016 (20 rows)

これは私のINSERTクエリです:

insert into CSP600_SCHEDULE (studentID,
                             studentName, 
                             projectTitle,
                             supervisorID,
                             supervisorName,
                             examinerID,
                             examinerName,
                             exavailableID,
                             availableday,
                             availablestart,
                             availableend,
                             availabledate)   
select  '2013816591',
        'mong',
        'abc',
        '1004',
        'Sue',
        '1002',
        'hazlifah',
          2,
        'Monday', //BASED ON THIS DAY
        '12:00:00',
        '2:00:00',
         to_char (a.presentationdatestart + delta, 'DD-MM-YYYY', 'NLS_CALENDAR=GREGORIAN') list_date //FOR AVAILABLEDATE
from     presentation a,
         (select     level - 1 as delta
          from       dual
          connect by level - 1 <= (select max (presentationdateend - presentationdatestart)
                                   from   presentation))
where    a.presentationdatestart + delta <= a.presentationdateend
and      a.presentationday = to_char(a.presentationdatestart + delta, 'fmDay')
order by a.presentationdatestart + delta,
         a.presentationid;

可能なすべての日付が 20 行だったため、このクエリは 20 行を正常に追加しました。に基づいて挿入できるようにクエリを変更したいと思います。availableDay各日付は、異なる ごとに 4 回しか使用できませんstudentID

考えられる結果CSP600_SCHEDULE(読みやすくするために無関係な列を削除しています):

StudentID   StudentName     availableDay      availableDate
  2013         abc             Monday           01-05-2016
  2014         def             Monday           01-05-2016
  2015         ghi             Monday           01-05-2016
  2016         klm             Monday           01-05-2016
  2010         nop            Tuesday           02-05-2016
  2017         qrs            Tuesday           02-05-2016
  2018         tuv            Tuesday           02-05-2016
  2019         wxy            Tuesday           02-05-2016
  .....
  2039         rrr             Monday           09-05-2016
  ..... 

あなたはカレンダーをチェックすることができます:)

4

1 に答える 1