我面臨的問題可能很容易解決,但由於問題的特殊性,我似乎無法在網上找到答案。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
我很清楚地知道,數據庫結構有待改進,簡化這,但不幸的是這是一個遺留應用程序,我不能改變結構。
任何人都可以用正確的方式指向我將這兩列結合起來。
我希望我能夠清楚地描述你的問題。否則,只是問:)
extradays沒有courseID,只有一個cycleid,但我加了一個內部連接到Cycles表。但其他一切正是我所需要的,感謝您的快速響應! – Flater 2013-03-19 11:12:45