如何 return 一行但连接原因列

How to return one row but concatenate the reason column

我有一个 sql 服务器 2012 数据库 table,其中包含如下数据:

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

从上面的数据可以看出,行 id 为 2 的原因有 2 个,因为该行有 2 个错误。

现在我要做的是仅 return 行一次,但将原因连接到 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

非常感谢专家的帮助

试试这个:

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

这个问题有答案,但是有一种 "right" 的方法来解决它。部分回答不完整。

你想要:

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 等效项(& 而不是 & 的问题, 例如).