我面临的问题可能很容易解决,但由于问题的特殊性,我似乎无法在网上找到答案。
在我的数据库中,我有 3 个表格来表示如何计划教育课程。假设有一门课程叫Working with Excel
. 这意味着该表Courses
有一行。
第二个表表示同一课程的周期。如果课程是在 2013 年 1 月 1 日和 2013 年 2 月 1 日提供的,那么在基础表Cycles
中,您会发现 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
问题是我需要从我还没有提到的第三个表中添加信息。该表ExtraDays
包含一个周期的额外天数,以防跨越一天以上。
例如,如果使用 Excel 课程需要 3 天(1 月 1+2+3 和 2 月 1+2+3),每个课程周期将有 2ExtraDays
行包含“额外天数”。
这些表看起来像这样:
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
我很清楚可以改进数据库结构以简化这一点,但不幸的是这是一个遗留应用程序,我无法更改结构。
谁能指出我以正确的方式组合这两列。
我希望我对你的问题描述得足够清楚。否则,请问:)