sql столбец результата заполняется запятыми - PullRequest
0 голосов
/ 09 января 2019

У меня три таблицы

провайдеры

provider_id     provider_name         email
   1              abc                 abc@gmail.com
   2              xyz                 xyz@gmail.com

специальность

speciality_id    speciality_name
   1             Derma
   2             Ortho

provider_speciality

Provider_id       speciality_id
   1                 1
   1                 2

Мне нужен ввод, как показано ниже

Providername      Speciality_name   email
abc               Derma,Ortho       abc@gmail.com

ниже мой запрос

select 
a.provider_name,
STUFF((SELECT ', ' + ff.speciality_name
          FROM speciality ff
          WHERE ff.speciality_id = pe.speciality_id
          FOR XML PATH('')), 1, 1, '') 
          speciality_name,
a.email
    from providers a 
    left join providers_speciality pe on a.provider_id = pe.provider_id 
              and ISNULL(1,pe.speciality_id) = pe.speciality_id
    left join speciality f with (nolock) on pe.speciality_id = f.speciality_id
    where 
     upper(a.provider_name) like upper(ISNULL('%abc%',a.provider_name)) 
     group by a.provider_name,a.email,pe.speciality_id

ниже результата

Providername      Speciality_name   email
abc               Derma       abc@gmail.com
abc               Ortho       abc@gmail.com

Это может быть из-за группировки по pe.speciality_id

но если я уберу это из group by пункта ниже, появится ошибка

provider_speciality.speciality_id 'недопустимо в списке выбора потому что он не содержится ни в статистической функции, ни в Предложение GROUP BY.

1 Ответ

0 голосов
/ 09 января 2019

Вы можете исключить GROUP BY следующим образом:

SELECT providers.*, STUFF((
    SELECT ',' + speciality_name
    FROM provider_speciality
    JOIN speciality ON provider_speciality.speciality_id = speciality.speciality_id
    WHERE provider_speciality.provider_id = providers.provider_id
    FOR XML PATH('')
), 1, 1, '') AS speciality_names
FROM providers

Демонстрация на дб <> скрипка

...