如何返回一行但连接原因列[重复]

Posted

技术标签:

【中文标题】如何返回一行但连接原因列[重复]【英文标题】:How to return one row but concatenate the reason column [duplicate] 【发布时间】:2015-01-15 13:13:58 【问题描述】:

我有一个 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

请专家帮忙,我们将不胜感激

【问题讨论】:

SQL Server 是否支持 GROUP_CONCAT?如果是,请按 id、import_id、tenancyname、所有者从 tablename 组中选择 id、import_id、tenancyname、owner、group_concat(reason) 查看此链接:***.com/questions/194852/… 看看this。 【参考方案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

【讨论】:

你的作品完美,但我如何在原因中加入换行符而不是逗号?当它进入excel时就是这样,原因在列表中【参考方案2】:

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

你想要:

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

【讨论】:

以上是关于如何返回一行但连接原因列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 if 语句更新单元格?

EXCEL把多列数据变成一行的函数

在 id 上选择 distinct 以返回一行,但能够访问其他列值(rails 关联)

excel如何判断一行数据是不是连续详细请看下图

如何从返回主键多行的连接中选择第一行

当该行的 clos 与上一行具有重复值时,如何进行 sql Select 查询,以便在后续行中将某些列留空?