Как вернуть одну строку, но объединить столбец причины
У меня есть таблица базы данных 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-эквиваленты (&
вместо &
, например).