У меня есть следующая таблица регистрации событий.В таблице многодневные события записываются в виде отдельной записи для каждой зарегистрированной даты.Кроме того, если дата заполнена, ее еще можно зарегистрировать в качестве даты ожидания.Я пытаюсь создать одну запись из записи в таблице ниже, где даты агрегируются строки.Таблица, показанная ниже, а также несколько связанных таблиц более сложны, чем эта, но я упростил для примера.
Таблица EventAssignments
+--------+---------+----------+--------+------------+
| UserID | EventID | AssignID | DateID | WaitListed |
+--------+---------+----------+--------+------------+
| 1 | 19 | 14 | 67 | 0 |
| 1 | 19 | 14 | 68 | 0 |
| 1 | 19 | 14 | 69 | 1 |
+--------+---------+----------+--------+------------+
Таблица EventDates
+--------+-------------------------+---------+------------+
| DateID | EventDate | EventID | DateTypeID |
+--------+-------------------------+---------+------------+
| 65 | 2019-03-20 00:00:00.000 | 19 | 1 |
| 66 | 2019-03-21 00:00:00.000 | 19 | 1 |
| 67 | 2019-03-22 00:00:00.000 | 19 | 2 |
| 68 | 2019-03-23 00:00:00.000 | 19 | 2 |
| 69 | 2019-03-24 00:00:00.000 | 19 | 2 |
| 70 | 2019-03-25 00:00:00.000 | 19 | 3 |
+--------+-------------------------+---------+------------+
Желаемые результаты запроса должны выглядеть следующим образом:
+--------+---------+----------+----------------------------+---------------+
| UserID | EventID | AssignID | RegisteredDates | WaitListDates |
+--------+---------+----------+----------------------------+---------------+
| 1 | 19 | 14 | 03/22/2019<br />03/23/2019 | 03/24/2019 |
+--------+---------+----------+----------------------------+---------------+
Я думал, что мне нужна некоторая логика, поэтому я попытался реализовать использование CASE, как показано ниже.Результаты, однако, по-прежнему отображаются в виде двух записей.первая запись для обычных дат, а вторая для дат ожидания в списке
SELECT a.UserID, a.EventID, a.AssignID,
(CASE WHEN a.WaitListed = 'false'
THEN STRING_AGG(CONVERT(varchar, d.EventDate, 101), '<br />') END) AS RegDates,
(CASE WHEN a.WaitListed = 'true'
THEN STRING_AGG(CONVERT(varchar, d.EventDate, 101), '<br />') END) AS WaitListDates
FROM dbo.EventAssignments AS a
INNER JOIN dbo.EventDates AS d ON a.DateID = d.DateID
GROUP BY a.UserID, a.EventID, a.WaitListed, a.AssignID