У меня есть 2 связанные таблицы: Producto и Productos_ProductosRelacionados
Producto Productos_ProductosRelacionados
|id|referencia| |id|idProducto|idProductoRelacionado|
|1 | A | |1 | 1 | 2 |
|2 | B | |2 | 1 | 3 |
|3 | C | |3 | 3 | 4 |
|4 | D | |4 | 3 | 5 |
|5 | E |
Мне нужно это:
|idProducto|referencia|
| 1 | B,C |
| 2 | |
| 3 | D,E |
У меня более старый SQL-сервер, поэтому не может использовать STRING_AGG ,До сих пор я достигал только конкатенации idProductoRelacionado :
|idProducto|idProductoRelacionado|
| 1 | 2,3 |
с:
SELECT pr1.idProducto
,STUFF((
SELECT ',' + CONVERT(varchar, pr.idProductoRelacionado)
FROM [Productos_ProductosRelacionados] as pr
WHERE pr.idProducto = pr1.idProducto
FOR XML PATH('')), 1, 1, '') as RelacionadosID
FROM [dbo].[Producto] as p1
join [Productos_ProductosRelacionados] as pr1 on p1.id = pr1.idProductoRelacionado
GROUP BY pr1.idProducto
Если я попробую тот же подход для конкатенации referencia columnон дает мне: «Столбец« dbo.Producto.id »недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY».
select pr1.idProducto
,STUFF((
SELECT ',' + p.referencia
FROM [dbo].[Producto] as p
WHERE p.id = p1.id
FOR XML PATH('')), 1, 1, '') as RelacionadosREF
from [dbo].[Producto] as p1
join [Productos_ProductosRelacionados] as pr1 on p1.id = pr1.idProductoRelacionado
GROUP BY pr1.idProducto
Я не понимаю разницы между двумя запросами, почему первый работает, а второй нет.