Używam ogólnego systemu do raportowania, który pobiera dane z widoku bazy danych (SQL Server 2005). W tym widoku musiałem scalić dane z relacji jeden do wielu w jednym wierszu i użyć rozwiązania opisanego przez priyanka.sarkar w tym wątku: Combine multiple results in a subquery into a single comma-separated value. Rozwiązanie wykorzystuje SQLXML do scalania danych (podzapytanie):SQLXML bez kodowania XML?
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
To działa doskonale (to nie jest nawet, że ciężkie wydajności) z wyjątkiem moich danych teraz dostaje XML zakodowany (& =>&
etc.) przez SQLXML -I w ogóle nie chciałem danych XML, użyłem tego jako sztuczki - i ze względu na ogólny system, nie mogę tego zakodować, aby oczyścić dane, aby zakodowane dane trafiały bezpośrednio do raportu. Nie mogę używać procedur przechowywanych w systemie generycznym, więc łączenie CURSOR-a lub COALESCE-ing nie jest tutaj opcją ...
Więc szukam sposobu w T-SQL, który pozwala mi dekodować XML ponownie, a nawet lepiej: unika kodowania SQLXML. Oczywiście mógłbym napisać przechowywane funkcji, która to robi, ale wolałbym wbudowany, bardziej bezpieczny sposób ...
dzięki za pomoc ...
Dzięki, uproszczone "(SELECT ... FOR XML PATH (''), typ) .Value ('', 'nvarchar (max)'.)" – Koen
+1 Byłem zdezorientowany przez zastosowanie krzyża i opcje root'a, więc dodałem komentarz @ Koena jako odpowiedź. – dotjoe