Я сломал себе голову, пытаясь воспроизвести эту проблему на динамически сгенерированном наборе данных, но, наконец, все сработало!
Это код
;with tbl as
(
select Id, ClCode, Manager, ChangeDate
from (values
(1, '000005', 'Cierra Vega', '2017-10-05'),
(2, '000005', 'Alden Cantrell', '2017-11-29'),
(3, '000005', 'Alden Cantrell', '2017-11-30'),
(4, '000005', 'Kierra Gentry', '2018-09-05'),
(5, '000005', 'Kierra Gentry', '2018-09-12'),
(6, '000005', 'Pierre Cox', '2018-11-06'),
(7, '000005', 'Thomas Crane', '2019-09-11'),
(8, '000005', 'Thomas Crane', '2019-10-01'),
(9, '000005', 'Miranda Shaffer', '2020-04-27'),
(10,'000360', 'Bradyn Kramer', '2017-10-06')
) as t(Id, ClCode, Manager, ChangeDate)
)
, grouped as
(
select c.ClCode
, count(distinct c.Manager) [ManagerChangesCount]
, STRING_AGG(c.[Manager], ',') within group (order by c.MinChangeDate) [Managers]
, STRING_AGG(c.MinChangeDate, ',') within group (order by c.MinChangeDate) [ChangeDates]
from (
select x.ClCode
, x.[Manager]
, min(x.ChangeDate) [MinChangeDate]
from tbl x
group by x.ClCode, x.[Manager]
) c
group by c.ClCode
)
select *
from grouped
Мой образец набор данных содержит данные о том, когда (ChangeDate) определенные клиенты (ClCode) сменили своего менеджера (Manager). Это часть реальной таблицы измерений клиентов DWH (SCD типа 2), поэтому эти «дубликаты» просто содержат изменения где-то в других столбцах.
Чего я пытаюсь достичь: мне нужен список коды клиентов с указанием того, сколько раз менялся их менеджер, и список разделенных запятыми имен этих менеджеров, отсортированных слева направо в порядке их изменения
ClCode ManagerChangesCount Managers ChangeDates
000005 6 Cierra Vega,Alden Cantrell,Kierra Gentry,Pierre Cox,Thomas Crane,Miranda Shaffer 2017-10-05,2017-11-29,2018-09-05,2018-11-06,2019-09-11,2020-04-27
000360 1 Bradyn Kramer 2017-10-06
Но на самом деле я получаю результаты без или с какой-то странной сортировкой
ClCode ManagerChangesCount Managers ChangeDates
000005 6 Alden Cantrell,Cierra Vega,Kierra Gentry,Miranda Shaffer,Pierre Cox,Thomas Crane 2017-11-29,2017-10-05,2018-09-05,2020-04-27,2018-11-06,2019-09-11
000360 1 Bradyn Kramer 2017-10-06
Этот запрос возвращает хорошую сортировку:
- , если я удалю
, count(distinct c.Manager) [ManagerChangesCount]
- , если я удалю строку id = 10 (второй клиент)
- если я добавлю условие фильтрации, где
where ClCode = '000005'
- , если я избавлюсь от повторяющихся строк в наборе данных и удаляю группу по из подзапроса
Но все равно для меня похоже на ошибку ... Я имею ввиду несортированные результаты по моему запросу
Ребята, разобрались, помогите пожалуйста разобраться, почему не работает сортировка