1

我有一个 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 行有 2 个原因,因为该行有 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

请专家帮助将不胜感激

4

2 回答 2

1

试试这个:

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
于 2015-01-15T13:17:03.973 回答
1

这个问题有答案,但有一个“正确”的方法来解决它。有些答案是不完整的。

你要:

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

于 2015-01-15T13:19:21.250 回答