Poprawne parsowanie atrybutów xml

0

Witam, mam problem z poprawnym parsowaniem atrybutów w xmlu. Jest on mianowicie taki :

<p id="96386" rid="1" i="Szymon" n="Tasz">Szymon Tasz</p>
<p id="96387" rid="2" i="Agnieszka" n="Przybylska">Agnieszka Przybylska</p>
<p id="96409" rid="5" i="Andrzej" n="Peszek">Andrzej Peszek</p>

W select mam jak na razie tak


SELECT 
	a.isbn,
	a.tytul,
	cba.core.xml_to_string((
				SELECT SUBSTRING(x.value('.[1]', 'VARCHAR(1000)'), 1, CHARINDEX(' ', x.value('.[1]', 'VARCHAR(1000)')) - 1) +' '+ SUBSTRING(x.value('.[1]', 'VARCHAR(1000)'), CHARINDEX(' ', x.value('.[1]', 'VARCHAR(1000)')) + 1, LEN(x.value('.[1]', 'VARCHAR(1000)')))
				FROM	am.osoby_xml.nodes('p') AS tx(x)  --- chyba tutaj musiałby znaleźć się where
				FOR XML PATH('s'), TYPE), 's', DEFAULT) AS autorzy,
	a.ilosc_stron,
	ad.cena_det_brutto,
	a.isbn_wersji_papierowej, 
	Data_wydania = (CAST(a.rok_wydania as VARCHAR(50)) + '-' + CASE WHEN LEN(a.miesiac_wydania) = 1  THEN '0'+ cast(a.miesiac_wydania as VARCHAR(50)) ELSE cast(a.miesiac_wydania as VARCHAR(50))END), 
	a.opis,
	w.nazwa,
	a.indeks 

z autorów chciałbym jeszcze wyfiltrować tylko tych, którzy mają atrybut rid ='1'

0

Najpierw sparsuj sobie samego XML-a do tabeli wtedy łatwiej będzie CI wyciągnąc potrzebne dane

DECLARE
	@Xml XML = '<p id="96386" rid="1" i="Szymon" n="Tasz">Szymon Tasz</p>
<p id="96387" rid="2" i="Agnieszka" n="Przybylska">Agnieszka Przybylska</p>
<p id="96409" rid="5" i="Andrzej" n="Peszek">Andrzej Peszek</p>'

DECLARE @tmpTable AS TABLE
(
	Id INT,
	Rid INT,
	I NVARCHAR(100),
	N NVARCHAR(100),
	[Value] NVARCHAR(100)
)

INSERT INTO @tmpTable
(
	Id,
	Rid,
	I,
	N,
	[Value]
)
SELECT  
       Tab.X.value('@id', 'int') AS Id,  
       Tab.X.value('@rid', 'int') AS Rid,  
       Tab.X.value('@i', 'NVARCHAR(100)') AS I,
       Tab.X.value('@n', 'NVARCHAR(100)') AS N,
	   Tab.X.value('.', 'NVARCHAR(100)') AS [Value]
FROM   @xml.nodes('//p') Tab(X)

SELECT * FROM @tmpTable WHERE Rid = 1
0

a jak sprowadzić wynik 2 wierszy do jednego ? zakładamy że wynikiem zapytania są 2 rekordy w których wszystkie dane są identyczne, poza jedną kolumną "kategoria". W jednej jest liczba 7 a w drugiej liczba 8, Skoro dane są identyczne w pozostałych kolumnach, to chciałbym osiągnąć efekt w którym otrzymam jeden rekord a w kolumnie kategoria, liczby po przecinku 7, 8... Nie mam pojęcia jak osiągnąć ten efekt

1 użytkowników online, w tym zalogowanych: 0, gości: 1