2013-03-19 137 views
2

我面臨的問題可能很容易解決,但由於問題的特殊性,我似乎無法在網上找到答案。SQL - 將兩列組合成逗號分隔列表

在我的數據庫中,我有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個包含「額外日期」的行。

的表是這樣的:

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
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' 
+0

extradays沒有courseID,只有一個cycleid,但我加了一個內部連接到Cycles表。但其他一切正是我所需要的,感謝您的快速響應! – Flater 2013-03-19 11:12:45