Tôi cần thực hiện một trục xoay trên cột XML trong một bảng, trong đó XML chứa nhiều phần tử với một số thuộc tính. Các thuộc tính trong mỗi phần tử luôn giống nhau, tuy nhiên số lượng phần tử sẽ thay đổi. Hãy để tôi đưa ra một ví dụ ...Làm cách nào để Xoay vòng thuộc tính của cột XML trong T-SQL
FormEntryId | FormXML | DateCreated
====================================================================================
1 |<Root> | 10/15/2009
| <Form> |
| <FormData FieldName="Username" FieldValue="stevem" /> |
| <FormData FieldName="FirstName" FieldValue="Steve" /> |
| <FormData FieldName="LastName" FieldValue="Mesa" /> |
| </Form> |
|</Root> |
| |
------------------------------------------------------------------------------------
2 |<Root> | 10/16/2009
| <Form> |
| <FormData FieldName="Username" FieldValue="bobs" /> |
| <FormData FieldName="FirstName" FieldValue="Bob" /> |
| <FormData FieldName="LastName" FieldValue="Suggs" /> |
| <FormData FieldName="NewField" FieldValue="test" /> |
| </Form> |
|</Root> |
tôi cần phải đối mặt với vấn kết quả phù hợp với từng FieldName biệt giá trị thuộc tính (Trong ví dụ này, Username, FirstName, LastName, và Newfield) với fieldValue tương ứng của họ thuộc tính như giá trị. Kết quả ví dụ như tôi đã ở trên sẽ giống như:
FormEntryId | Username | FirstName | LastName | NewField | DateCreated
======================================================================
1 | stevem | Steve | Mesa | NULL | 10/15/2009
----------------------------------------------------------------------
2 | bobs | Bob | Suggs | test | 10/16/2009
tôi đã tìm ra một cách để thực hiện điều này với các cột tĩnh
SELECT
FormEntryId,
FormXML.value('/Root[1]/Form[1]/FormData[@FieldName="Username"][1]/@FieldValue','varchar(max)') AS Username,
FormXML.value('/Root[1]/Form[1]/FormData[@FieldName="FirstName"][1]/@FieldValue','varchar(max)') AS FirstName,
FormXML.value('/Root[1]/Form[1]/FormData[@FieldName="LastName"][1]/@FieldValue','varchar(max)') AS LastName,
FormXML.value('/Root[1]/Form[1]/FormData[@FieldName="NewField"][1]/@FieldValue','varchar(max)') AS NewField,
DateCreated
FROM FormEntry
Tuy nhiên tôi muốn nhìn thấy nếu có một phương pháp để có các cột động dựa trên các giá trị thuộc tính "FieldName" riêng biệt.
+1 để tạo mã đẹp. –