如何返回一行但连接原因列[重复]
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 等效项的问题(例如&
而不是&
)。
【讨论】:
以上是关于如何返回一行但连接原因列[重复]的主要内容,如果未能解决你的问题,请参考以下文章