Вывести множество значений в ячейку sql-server

Нужно вывести информацию о заказе - id заказа | информация о заказе

Информация о заказа должно быть одной ячейкой.
Пример:
<Имя товара> Количество: <количество в заказе> шт.
<Имя товара> Количество: <количество в заказе> шт.
<Имя товара> Количество: <количество в заказе> шт.
....
Как это сделать? Вот табличка, откуда берется информация

Табличка


Ответы (1 шт):

Автор решения: teran

в общем говоря, будем считать, что если в данной таблице какого-то товара в заказе несколько штук, то этому соответствует несколько одинаковых строк (так вообще не делают). Тогда сначала считаем количество товара в каждом. Потом формируем строк (можете и в одной 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)

→ Ссылка