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