データベース ビュー (SQL Server 2005) からデータを取得するレポート用の汎用システムを使用しています。このビューでは、1 対多の関係からのデータを 1 つの行にマージする必要があり、このスレッドで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 マージまたは COALESCE はここではオプションではありません...
したがって、私が探しているのは、XML を再度デコードできる T-SQL の方法です。それよりも優れているのは、SQLXML によるエンコードを回避することです。明らかに、これを行うストアド関数を作成できますが、組み込みのより安全な方法を好む...
ご協力いただきありがとうございます...