SQL Сервер: объединить каждый отдельный столбец в 1 строку - PullRequest
0 голосов
/ 10 апреля 2020

У меня довольно сложный запрос, который возвращает такую ​​информацию:

Image1

Я хотел бы сгруппировать все столбцы следующим образом:

image2

Есть ли простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Здесь вы go:

WITH cte AS (
    SELECT 368519 AS Id, '243625378R' AS InternalRef, '492-90-113' AS ExternalRef, '1749MA' AS ComponentIdentifier
    UNION ALL
    SELECT 368519 AS Id, '243625378R' AS InternalRef, '492-90-114' AS ExternalRef, '1749MA' AS ComponentIdentifier
    UNION ALL
    SELECT 368519 AS Id, '(8200945715)' AS InternalRef, '(7807965)' AS ExternalRef, '1749MA' AS ComponentIdentifier)
SELECT
    Id,
    STUFF((SELECT ',' + InternalRef FROM cte FOR XML PATH ('')), 1, 1, ''),
    STUFF((SELECT ',' + ExternalRef FROM cte FOR XML PATH ('')), 1, 1, ''),
    ComponentIdentifier
FROM
    cte
GROUP BY
    Id,
    ComponentIdentifier;

Предполагается, что cte, выражение общей таблицы является выводом из вашего существующего запроса. Так что вы можете заключить это в выражение общей таблицы (заменив мой оператор UNION), поместить во временную таблицу, в табличную переменную и т. Д. c.

Я также делаю некоторые предположения это может быть неправильно, но мой вывод совпадает с вашим:

Id      (No column name)                    (No column name)        ComponentIdentifier
368519  243625378R,243625378R,(8200945715)  492-90-113,492-90-114,(7807965) 1749MA
0 голосов
/ 10 апреля 2020

Это может быть одним из способов получения вашего результата:

SELECT 
   t.ID,
   STUFF((SELECT distinct ', ' + t.InternalRef
          FROM #t t
          FOR XML PATH('')), 1, 1, '') [InternalRef],

   STUFF((SELECT distinct ', ' + t.ExternalRef
   FROM #t t
   FOR XML PATH('')), 1, 1, '') [ExternalRef],

   STUFF((SELECT distinct ', ' + t.ComposantIdentifier
   FROM #t t
   FOR XML PATH('')), 1, 1, '') [ComposantIdentifier]
FROM #t t
GROUP BY t.ID
ORDER BY 1

Вы можете попробовать демоверсию этого здесь .

...