Как вернуть одну строку, но объединить столбец причины

У меня есть таблица базы данных SQL Server 2012, которая содержит данные, как показано ниже:

id    import_id    tenancyname    owner    reason
----- ----------   ------------   -----    ------
1      1            test          null     Owner is missing
2      2            null          null     Tenancy Name is Missing
2      2            null          null     Owner is Missing

Как видно из приведенных выше данных, для идентификатора строки 2 есть две причины, потому что в этой строке две вещи неправильные.

Теперь я пытаюсь вернуть строку только один раз, но объединить причины в 1 ячейку, чтобы она выглядела следующим образом:

id    import_id    tenancyname    owner    reason
----- ----------   ------------   -----    ------
1      1            test          null     Owner is missing
2      2            null          null     Tenancy Name is Missing \newline Owner is Missing

помогите пожалуйста от экспертов будет принята с благодарностью

2 ответа

Решение

Попробуй это:

SELECT A.id, A.import_id, A.tenancyname, A.owner, MAX(STUFF(fxMerge.reason, 1, 1, '')) 
FROM tableA A
CROSS APPLY(
    SELECT ',' + reason 
    FROM tableA A1
    WHERE A.import_id = A1.import_id 
    FOR XML PATH('')
) fxMerge (reason) 
GROUP BY A.id, A.import_id, A.tenancyname, A.owner

На этот вопрос есть ответы, но есть "правильный" подход к нему. Некоторые ответы являются неполными.

Ты хочешь:

select id, import_id, tenancyname, owner,
       stuff((select '
' + reason
             from table t2
             where t2.id = t.id
             for xml path ('concat'), type
            ).value('/concat[1]', 'varchar(max)'),
            1, 1, '')
from table t
group by id, import_id, tenancyname, owner;

Важно использовать value вытащить значение, потому что это решает проблему преобразования символов в xml-эквиваленты (& вместо &, например).

Другие вопросы по тегам