I have a table like this :
YEAR    int,
Fields  XML
My XML column has this structure for all rows but with different values:

How I can get this result:
YEAR         ID           NAME             LASTNAME
---------------------------------------------------
2011         1000         Nima               Agha
2011         1001         Begha              Begha
2011         1002         Jigha              Jigha
2011         1003         Aba                Aba
2012         1034         AAA                BBB
...
thanks
How about this:
 SELECT 
     Year,
     E.P.value('(ID)[1]', 'INT') AS 'ID',
     E.P.value('(Name)[1]', 'VARCHAR(50)') AS 'Name',
     E.P.value('(LastName)[1]', 'VARCHAR(50)') AS 'LastName'
 FROM 
     dbo.YourTable 
 CROSS APPLY
     Fields.nodes('/Employees/Person') AS E(P)
You're basically selecting Year from the base table and then extracting each <Person> node from the Fields column into an "inline XML table" called E with a single XML column called P (you can choose whatever names you like for those) that you again query and extract the individual elements from .
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With