У меня есть этот запрос:
SELECT
tc.dv_task,
tc.dv_ci_item,
STUFF((
SELECT ',' + lob.name
FROM u_cmdb_ci_line_of_business lob
where lob.sys_id = tc.ci_item
GROUP BY tc.dv_task
FOR XML PATH('') ), 1, 1, '') AS LOBs
FROM task_ci tc
INNER JOIN u_cmdb_ci_line_of_business lob on tc.ci_item = lob.sys_id
Возвращает следующую ошибку: Сообщение 164, Уровень 15, Состояние 1, Строка 8 Каждое выражение GROUP BY должно содержать хотя бы один столбец, который не является внешней ссылкой .
Я использую Microsoft SQL Server 2016 (SP2-GDR) (KB4505220) - 13.0.5101.9 (X64)
Вот что я пытаюсь выполнить sh: У меня есть две таблицы task_ci (t c) и u_cmdb_line_of_business (lob). Таблицы объединяются по t c .ci_item = lob.sys_id. Для каждой задачи dv_task в таблице t c мне нужна одна строка, в которой в поле через запятую перечисляются связанные ci_items из таблицы lob. Вот почему я пытаюсь сгруппировать по dv_task.
If I take out the group by, I get this:
tc.dv_task LOBs (Stuff field)
123456 lob.ci_item 1
123456 lob.ci_item 2
Я хочу это: dv_task LOBs (Stuff field) 123456 lob. ci_item 1, lob.ci_item 2
Но когда я добавляю эту группу в качестве попытки собрать вещи в один ряд, я получаю эту ошибку. Надеюсь, что это имеет смысл.
Может кто-нибудь сказать мне, что я делаю неправильно?
РЕДАКТИРОВАТЬ: 03/23
Хорошо, я понял, я просто изменил это подстроке вот так
select
inc.number,
substring((select ', ' + lob.name from task_ci tc
join u_cmdb_ci_line_of_business lob on lob.sys_id = tc.ci_item
where inc.sys_id = tc.task
for XML PATH('')),2,1000) as lob_sysid
from incident inc
where inc.number = 'INC1157655'
Я до сих пор не уверен, что я делал неправильно с STUFF, но я попробую это с другой таблицей, чтобы посмотреть, как это работает.
Спасибо за помощь.