私が直面している問題はおそらく簡単に修正できますが、問題の特異性のためにオンラインで答えを見つけることができないようです.
私のデータベースには、教育コースの計画方法を示す 3 つのテーブルがあります。というコースがあるとしWorking with Excel
ます。これは、テーブルCourses
にこのための行があることを意味します。
2 番目の表は、同じコースのサイクルを示します。コースが 2013 年 1 月 1 日と 2013 年 2 月 1 日に行われた場合、基礎となるテーブルCycles
には、日付ごとに 1 行ずつ 2 行が表示されます。
私は現在、2 つの列を提供する SQL スクリプトを既に持っています。コース名と、すべてのCycle
日付を含むコンマ区切りのリストです。
dd/MM/yyyy 表記を使用していることに注意してください
これは現在の設定方法です (小さな抜粋、これは目的の出力を説明するための SELECT ステートメントです)。
SELECT course.name,
stuff((SELECT distinct ',' + CONVERT(varchar(10), cycleDate, 103) --code 101 = mm/dd/yyyy, code 103 = dd/mm/yyyy
FROM cycles t2
where t2.courseID= course.ID and t2.cycleDate > GETDATE()
FOR XML PATH('')),1,1,'') as 'datums'
それが私に与える出力:
NAME DATUMS
---------------------------------------------------
Working with Excel 01/01/2013,01/02/2013
Some other course 12/3/2013, 1/4/2013, 1/6/2013
問題は、まだ言及していない 3 番目のテーブルから情報を追加する必要があることです。テーブルExtraDays
には、サイクルが 1 日以上にわたる場合に備えて、追加の日数が含まれています。
たとえば、Working with Excel コースが 3 日間 (1 月 1+2+3 日と 2 月 1+2+3 日) かかる場合、各コース サイクルにはExtraDays
「余分な日」を含む 2 つの行があります。
テーブルは次のようになります。
Table COURSES
ID NAME
---------------------------------------------------
1 Working with Excel
Table CYCLES
ID DATE COURSEID
---------------------------------------------------
1 1/1/2013 1
2 1/2/2013 1
Table EXTRADAYS
ID EXTRADATE CYCLEID
---------------------------------------------------
1 2/1/2013 1
2 3/1/2013 1
3 2/2/2013 2
4 3/2/2013 2
ExtraDates
これらを出力のカンマ区切りの日付リストに追加する必要があります。できれば並べ替えますが、これは必須ではありません。
私はこれにかなり長い間困惑してきました。私はSQLの経験がありますが、明らかにこの問題には十分ではありません:)
次の出力が得られることを望んでいます。
NAME DATUMS
--------------------------------------------------------------------------------------
Working with Excel 01/01/2013,02/01/2013,03/01,2013,01/02/2013,02/02/2013,03/02/2013
これを簡素化するためにデータベース構造を改善できることは承知していますが、残念ながらこれはレガシー アプリケーションであるため、構造を変更することはできません。
これら 2 つの列を組み合わせる正しい方法を教えてください。
私の問題を十分に明確に説明したことを願っています。それ以外の場合は、お尋ねください:)