My requirement :
Source :
Answer_Choice
X;0;Y;0;Z
Result :
Answer_Request Rn
X 1
Y 3
Z 5
Query I used:
with cte_row as
(
SELECT row_num,
answer_request = Split.a.value('.', 'VARCHAR(1000)')
FROM (SELECT row_num = ROW_NUMBER() over(order by answer_choices),
String = CAST ('' + REPLACE(answer_choices, ';', '') + '' AS XML)
FROM survey
GROUP BY answer_choices) AS a
CROSS APPLY String.nodes ('/M') AS Split(a)),
cte_num AS
(SELECT rn = ROW_NUMBER() over(partition by row_num order by row_num),*
FROM cte_row)
SELECT rn
,answer_request
FROM cte_num
WHERE answer_request <> '0'
This query is failing when I get the source row as : A>1;B;C (> in the input data)..
Error : XML parsing: illegal qualified name character
Can any one help out on this please???