Вывести множество значений в ячейку sql-server
Нужно вывести информацию о заказе - id заказа | информация о заказе
Информация о заказа должно быть одной ячейкой.
Пример:
<Имя товара> Количество: <количество в заказе> шт.
<Имя товара> Количество: <количество в заказе> шт.
<Имя товара> Количество: <количество в заказе> шт.
....
Как это сделать? Вот табличка, откуда берется информация
Ответы (1 шт):
в общем говоря, будем считать, что если в данной таблице какого-то товара в заказе несколько штук, то этому соответствует несколько одинаковых строк (так вообще не делают). Тогда сначала считаем количество товара в каждом. Потом формируем строк (можете и в одной cte)
WITH qdata AS (
SELECT order_id, name, count(name) AS qty
FROM t
GROUP BY order_id, name
),
data AS (
SELECT order_id, CONCAT(name, ' количество ' , qty) AS x
FROM qdata
)
Далее в новых версиях 2017+ использует string_agg
SELECT order_id, string_agg(x, ', ')
FROM data
GROUP BY order_id
в старых обычно сей вопрос решают через XML - либо подзапросом, либо через cross apply. получаем что-то вроде
SELECT order_id, LEFT(res, len(res)-1) AS res
FROM data AS t1
CROSS APPLY (
SELECT x + ','
FROM data AS t2
WHERE t2.order_id = t1.order_id
FOR XML PATH('')
) AS z (res)
GROUP BY order_id, res
вместо запятых, вам видимо потребуется char(13)
