我面临的问题可能很容易解决,但由于问题的特殊性,我似乎无法在网上找到答案。
在我的数据库中,我有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),则每个课程周期将包含2个ExtraDays
行,其中包含'额外'天。
表格如下所示:
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
我很清楚可以改进数据库结构来简化这个,但遗憾的是这是一个遗留应用程序,我无法改变结构。
任何人都可以指出我正确的方法来组合这两列。
我希望我能够清楚地描述我的问题。另外,请问:)
答案 0 :(得分:2)
SELECT course.name,
stuff((SELECT distinct ',' + CONVERT(varchar(10), cycleDate, 103) --code 101 = mm/dd/yyyy, code 103 = dd/mm/yyyy
FROM (select id, date, courseid from cycles
union
select id, extradate, courseid from extradays) t2
where t2.courseID= course.ID and t2.cycleDate > GETDATE()
FOR XML PATH('')),1,1,'') as 'datums'