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