SQL-将两列合并为逗号分隔的列表

SQL-将两列合并为逗号分隔的列表,sql,sql-server-2008,Sql,Sql Server 2008,我面临的问题可能很容易解决,但由于问题的特殊性,我似乎无法在网上找到答案 在我的数据库中,我有3个表来表示教育课程是如何计划的。假设有一门名为《使用Excel》的课程。这意味着表Courses中有一行用于此操作 第二个表表示相同路线的周期。如果课程在2013年1月1日和2013年2月1日进行,则在基础表格Cycles中,您将发现两行,每个日期一行 我目前已经有了一个SQL脚本,它为我提供了两列:课程名称和一个逗号分隔的列表,其中列出了所有的周期日期 请注意,我使用的是dd/MM/yyyy符号 这

我面临的问题可能很容易解决,但由于问题的特殊性,我似乎无法在网上找到答案

在我的数据库中,我有3个表来表示教育课程是如何计划的。假设有一门名为《使用Excel》的课程。这意味着表
Courses
中有一行用于此操作

第二个表表示相同路线的周期。如果课程在2013年1月1日和2013年2月1日进行,则在基础表格
Cycles
中,您将发现两行,每个日期一行

我目前已经有了一个SQL脚本,它为我提供了两列:课程名称和一个逗号分隔的列表,其中列出了所有的
周期
日期

请注意,我使用的是dd/MM/yyyy符号

这是它当前的设置方式(小摘录,这是解释所需输出的SELECT语句):

它给我的输出是:

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个包含“额外天数”的
extraday

这些表如下所示:

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    
我需要将这些
extradate
添加到输出中以逗号分隔的日期列表中。最好分类,但这不是必需的

我已经被这件事难住好长时间了。我有一些SQL经验,但显然不足以解决这个问题:)

我希望得到以下输出:

NAME                  DATUMS
--------------------------------------------------------------------------------------
Working with Excel    01/01/2013,02/01/2013,03/01,2013,01/02/2013,02/02/2013,03/02/2013
我很清楚,可以通过改进数据库结构来简化这一点,但不幸的是,这是一个遗留应用程序,我无法更改结构

有谁能告诉我如何正确组合这两个专栏


我希望我对我的问题描述得足够清楚。否则,只需问:)

extradays没有courseID,只有cycleid,但我在Cycles表中添加了一个内部联接。但其他一切正是我所需要的,谢谢你的快速回复!
NAME                  DATUMS
--------------------------------------------------------------------------------------
Working with Excel    01/01/2013,02/01/2013,03/01,2013,01/02/2013,02/02/2013,03/02/2013
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'