Проблема, с которой я сталкиваюсь, вероятно, легко исправить, но я не могу найти ответ в сети из-за специфики проблемы.SQL - объединить два столбца в список, разделенный запятой
В моей базе данных у меня есть 3 таблицы, которые обозначают, как планируется учебный курс. Предположим, что есть курс под названием Working with Excel
. Это означает, что таблица Courses
имеет ряд для этого.
Вторая таблица обозначает циклы одного и того же курса. Если курс будет дан 1 января 2013 года и 1 февраля 2013 года, в базовых таблицах Cycles
вы найдете 2 строки, по одному на каждую дату.
У меня уже есть SQL-скрипт, который дает мне два столбца: название курса и список, разделенный запятой, со всеми датами Cycle
.
Пожалуйста, обратите внимание, я использую дд/мм/гггг обозначение
Это, как это в настоящее время создано (небольшой отрывок, это ЗЕЬЕСТ объяснить желаемый результат):
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 января + 2 + 3 и 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
Я хорошо знаю, что структура базы данных может быть улучшена, чтобы упростить это, но, к сожалению, это устаревшее приложение, я не могу изменить структуру.
Может ли кто-нибудь указать мне правильный способ объединения этих двух столбцов.
Надеюсь, я подробно описал свою проблему для вас. Else, просто спросите :)
extradays не имеет идентификатор курса, только цикл, но я добавил внутреннее соединение к таблице Cycles. Но все остальное было именно тем, что мне нужно, спасибо за ваш быстрый ответ! – Flater