Poniżej znajduje się skrypt Oracle, który muszę wykonać na serwerze SQL.
SELECT
records.pr_id,
SUBSTR (REPLACE (REPLACE (XMLAGG (XMLELEMENT ("x", prad4.selection_value)
ORDER BY prad4.selection_value),'</x>'),'<x>',' ; '),4) as teva_role
FROM records
Dzięki za pomoc,
Barry
2 odpowiedzi
Od lat programuję w SQL w kilku środowiskach i jest to w około 75% to samo. Tak więc instrukcja SQL powinna działać tak, jak jest, jednak funkcje (REPLACE, SUBSTR) będą tym, czego potrzebujesz, aby zbadać i zmienić.
Ponadto otrzymujesz kolumny z prad4 bez uwzględniania go w instrukcji FROM, co jest problemem.
I wreszcie, twoje nawiasy nie są zbalansowane, co, jak sądzę, byłoby problemem również w Oracle.
Jest to w zasadzie łączenie zestawu ciągów z ogranicznikiem. Typowym sposobem na to jest użycie FOR XML PATH('')
, które wydaje się być odpowiednikiem kombinacji XMLELEMENT()
w Oracle, ale z inną składnią. Możesz także użyć funkcji XML, aby zapobiec zmianie niektórych znaków niedozwolonych w XML. STUFF zajmuje się SUBSTR()
częścią Twojego kodu. Bardziej szczegółowe wyjaśnienie można znaleźć w tym artykule na Tworzenie listy rozdzielanej przecinkami.
Kod powinien wyglądać podobnie do tego:
SELECT records.pr_id,
STUFF(( SELECT ' ; ' + prad4.selection_value
FROM prad4
WHERE prad4.pr_id = records.pr_id
ORDER BY prad4.selection_value
FOR XML PATH(''), TYPE).value('./text()[1]', 'varchar(max)'), 1, 3, '')
FROM records;
Oczywiście dzięki ulepszeniom SQL Server 2017 kod można uprościć do czegoś takiego:
SELECT records.pr_id,
STRING_AGG( selection_value, ' ; ') WITHIN GROUP (ORDER BY selection_value ASC)
FROM records;
Podobne pytania
Nowe pytania
sql-server
Microsoft SQL Server to system zarządzania relacyjnymi bazami danych (RDBMS). Użyj tego tagu dla wszystkich wersji SQL Server, w tym Compact, Express, Azure, Fast-track, APS (dawniej PDW) i Azure SQL DW. Nie używaj tego tagu dla innych typów DBMS (MySQL, PostgreSQL, Oracle itp.). Nie używaj tego tagu w przypadku problemów z oprogramowaniem i programowaniem mobilnym, chyba że jest on bezpośrednio powiązany z bazą danych.