Я использую общую систему для отчетности, которая берет данные из представления базы данных (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
Это работает отлично (это даже не так тяжело в производительности), за исключением того, что мои данные теперь получают XML-кодировку (& = > &
и т.д.) SQLXML -I не нужны XML-данные, я просто использовал это как трюк, и из-за общей системы я не могу ее кодировать, чтобы очистить ее, чтобы закодированные данные попадали прямо в отчет. Я не могу использовать хранимые процедуры с общей системой, поэтому CURSOR-merging или COALESCE-ing здесь не вариант...
Итак, то, что я ищу, - это способ в T-SQL, который позволяет мне снова декодировать XML или даже лучше: избегает SQLXML от его кодирования. Очевидно, что я мог бы написать хранимую функцию, которая сделает это, но я бы предпочел встроенный, более безопасный способ...
Спасибо за вашу помощь...