我正在使用通用系统进行报告,该系统从数据库视图(SQL Server 2005)中获取数据。在此视图中,我必须将一对多关系中的数据合并到一行中,并使用priyanka.sarkar在此线程中描述的解决方案:将子查询中的多个结果组合成一个逗号分隔值。该解决方案使用 SQLXML 合并数据(子查询):
SELECT STUFF(
( SELECT ', ' + Name
FROM MyTable _in
WHERE _in.ID = _out.ID
FOR XML PATH('')), -- Output multiple rows as one xml type value,
-- without xml tags
1, 2, '') -- STUFF: Replace the comma at the beginning with empty string
FROM MyTable _out
GROUP BY ID -- Removes duplicates
除了我的数据现在通过 SQLXML 获得 XML 编码(& => 等)之外,它工作得很好(它甚至没有那么重) &
- 毕竟我不想要 XML 数据,我只是把它用作一个技巧 - 并且因为通用系统我无法围绕它进行编码来清理它,因此编码数据直接进入报告。我不能在通用系统中使用存储过程,因此这里不能选择 CURSOR-merging 或 COALESCE-ing ...
所以我正在寻找的是 T-SQL 中的一种方式,它可以让我再次解码 XML,甚至更好:避免 SQLXML 对其进行编码。显然我可以编写一个存储函数来执行此操作,但我更喜欢内置的、更安全的方式......
谢谢你的帮助...